首页 > 解决方案 > scipy.misc.imresize() 的替代方案

问题描述

我想使用一个仍然使用的旧脚本,它scipy.misc.imresize()不仅被弃用,而且完全从 scipy 中删除。相反,开发人员建议使用numpy.array(Image.fromarray(arr).resize())skimage.transform.resize()

不再工作的确切代码行是:

new_image = scipy.misc.imresize(old_image, 0.99999, interp = 'cubic')

不幸的是,我不再完全确定它到底做了什么。恐怕如果我开始使用旧的 scipy 版本,我的新脚本将停止工作。我一直将它用作模糊滤镜的一部分。如何进行numpy.array(Image.fromarray(arr).resize())skimage.transform.resize()执行与上述代码行相同的操作?抱歉,我提供的信息不足。

编辑

我已经能够确定这条线的作用。它从此转换图像数组:

[[[0.38332759 0.38332759 0.38332759]
  [0.38770704 0.38770704 0.38770704]
  [0.38491378 0.38491378 0.38491378]
  ...

对此:

[[[57 57 57]
  [59 59 59]
  [58 58 58]
  ...

编辑2

当我使用 jhansens 方法时,输出是这样的:

[[[ 97  97  97]
  [ 98  98  98]
  [ 98  98  98]
  ...

我不明白做什么scipy.misc.imresize

标签: python-3.xnumpyscipyscikit-image

解决方案


您可以查找已弃用函数的文档源代码。简而言之,使用Pillow ( Image.resize) 您可以:

im = Image.fromarray(old_image)
size = tuple((np.array(im.size) * 0.99999).astype(int))
new_image = np.array(im.resize(size, PIL.Image.BICUBIC))

使用skimage ( skimage.transform.resize) 你应该得到相同的结果:

size = (np.array(old_image.size) * 0.99999).astype(int)
new_image  = skimage.transform.resize(old_image, size, order=3)

推荐阅读