在尝试导入或直接使用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'
我在做什么错了?
答案 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.misc
中的以下功能:bytescale
,fromimage
,imfilter
,imread
,imresize
,imrotate
,imsave
,imshow
和toimage
。这些功能大多数都具有意外行为(例如在用户不要求的情况下进行缩放和键入转换图像数据)。其他功能只是有更好的选择。
来自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数组,尽管它们是一个子类(以便可以附加元数据)。