首页 > 解决方案 > scipy.misc 图像函数(例如 imread、imresize、imsave、imshow 等)上的 AttributeError、ImportError

问题描述

scipy.misc在尝试导入或直接使用模块中包含的任何图像功能时,我遇到了两种错误。以下是该imread()函数的两个错误示例:

>>> from scipy.misc import imread

ImportError: cannot import name 'imread' from 'scipy.misc'

>>> import scipy.misc                                                                                                                                                                
>>> scipy.misc.imread

AttributeError: module 'scipy.misc' has no attribute 'imread'

我究竟做错了什么?

标签: imagescipypython-importimporterror

解决方案


你没有做错任何事。这是由于自 SciPy 版本 1.2.0 以来从模块中删除了图像功能。scipy.misc我不知道他们为什么认为这些功能已被弃用并删除,但如果你想使用它们,你可以通过卸载当前版本并安装以前的 SciPy 版本来回滚到以前的 SciPy 版本:

pip uninstall scipy
pip install scipy==1.1.0

确保你也Pillow安装了:

pip install Pillow

如果您不想使用旧版本的 SciPy,则需要更改代码。根据每个已弃用函数的官方文档,以下是 SciPy 的建议:

  • fromimage(im)->np.asarray(im)
  • imfilter()-> 直接使用枕头过滤功能。
  • imread()->imageio.imread()
  • imsave()->imageio.imwrite()
  • imresize()->numpy.array(Image.fromarray(arr).resize())
  • imrotate->skimage.transform.rotate()
  • imshow()->matplotlib.pyplot.imshow()
  • toimage()->Image.fromarray()

它假定安装以下库:

pip install numpy Pillow scikit-image imageio matplotlib

并导入它们:

import numpy as np, Pillow, skimage, imageio, matplotlib

此外,我引用了我找到的两个来源,提到了scipy.misc图像 I/O 功能的弃用:

scipy.github.io

不推荐使用以下函数scipy.miscbytescalefromimageimfilterimreadimresizeimrotateimsave和。这些函数中的大多数都有意想不到的行为(比如在没有用户要求的情况下重新缩放和类型转换图像数据)。其他功能只是有更好的选择。imshowtoimage

来自imageio.readthedocs.io(尤其是对于imread):

从 Scipy 的 imread 过渡

Scipy 正在弃用他们的图像 I/O 功能。

本文档旨在帮助来自 Scipy 的人适应 Imageio 的 imread 功能。我们建议阅读用户 api 并查看一些示例以了解 imageio。

Imageio 利用各种插件来支持从许多不同格式读取图像(和卷/电影)。幸运的是,Pillow 是常用图像的主要插件,与 Scipy 的 imread 使用的库相同。请注意,Imageio 会根据要读取的图像自动选择插件(除非明确指定格式),但会尽可能使用 Pillow。

简而言之:对于以前由 Scipy 的 imread 读取的图像,imageio 通常也应该使用 Pillow,并且在这些情况下 imageio 提供与 Scipy 相同的功能。但请记住:

  • 使用 pilmode 关键字参数代替模式。
  • 使用 as_gray 关键字参数代替展平。
  • 上述参数的文档不在 imread 上,而是在各个格式的文档上,例如 PNG。
  • Imageio 的函数都返回 numpy 数组,尽管它是一个子类(以便可以附加元数据)。

推荐阅读