scipy.misc图像函数上的AttributeError,ImportError(例如,x imread,imresize,imsave,imshow等)

时间:2019-09-04 22:35:34

标签: image scipy python-import 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'

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您没有做错任何事情。这是由于SciPy 1.2.0版以来的removal of the image functions from the scipy.misc module。我不知道为什么他们认为这些功能已过时并删除了它们,但是如果要使用它们,可以通过卸载当前版本并安装先前版本来回滚到先前的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.misc中的以下功能:bytescalefromimageimfilterimreadimresizeimrotateimsaveimshowtoimage。这些功能大多数都具有意外行为(例如在用户不要求的情况下进行缩放和键入转换图像数据)。其他功能只是有更好的选择。

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

  

从Scipy的读音过渡

     

Scipy正在弃用其图像I / O功能。

     

本文档旨在帮助来自Scipy的人们适应   Imageio的读取功能。我们建议阅读用户api和   查看一些示例以获取图像效果。

     

Imageio利用各种插件来支持读取图像(以及   数量/电影)。幸运的是,枕头是   通用图像的主插件,与使用的库相同   受到Scipy的喜爱。请注意,Imageio会自动选择一个插件   基于要读取的图像(除非明确指定格式),   但尽可能使用枕头。

     

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

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