scipy.misc.imresize的替换方案

错误提示

当scipy版本>=1.3.0时,导入scipy.misc.imresize会出现如下错误
AttributeError: module ‘scipy.misc’ has no attribute ‘imresize’

from scipy.misc import imresize
ImportError: cannot import name ‘imresize’

原因

scipy版本>=1.3.0时,scipy模块已经移除了scipy.misc.imresize
1.0.0<=scipy版本<1.3.0时,scipy模块会提示scipy.misc.imresize过时,新版本中会移除此函数

替换方案

在scipy版本==1.2.1时,调用scipy.misc.imresize,出现如下提示
DeprecationWarning: imresize is deprecated!
imresize is deprecated in SciPy 1.0.0, and will be removed in 1.3.0.
Use Pillow instead: numpy.array(Image.fromarray(arr).resize()).

因此如需与早期版本scipy库中的imresize效果一致,直接使用PIL库中的resize即可

通过调试源码进一步说明

scipy测试版本:1.2.1
在测试代码中调用scipy.misc.imresize(img, (200, 300))
其中img为numpy.ndarray类型
通过对上述代码下断点调试,最终会定位到***\scipy\misc\pilutil.py文件中的imresize函数
下面贴出imresize函数代码

@numpy.deprecate(message="`imresize` is deprecated in SciPy 1.0.0, "
                        "and will be removed in 1.3.0.\n"
                        "Use Pillow instead: ``numpy.array(Image.fromarray(arr).resize())``.")
def imresize(arr, size, interp='bilinear', mode=None):
   im = toimage(arr, mode=mode) # im为PIL.Image.Image对象
   ts = type(size)
   if issubdtype(ts, numpy.signedinteger):
       percent = size / 100.0
       size = tuple((array(im.size)*percent).astype(int))
   elif issubdtype(type(size), numpy.floating):
       size = tuple((array(im.size)*size).astype(int))
   else:
       size = (size[1], size[0])
   func = {'nearest': 0, 'lanczos': 1, 'bilinear': 2, 'bicubic': 3, 'cubic': 3}
   imnew = im.resize(size, resample=func[interp]) # 调用PIL库中的resize函数
   return fromimage(imnew)

其中第5行中的im为PIL.Image.Image对象,
最终对图像进行resize处理代码为倒数第二行,可以看到核心函数为PIL库中的resize函数

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值