scipy.misc模块没有imread属性?

180

我正在尝试使用scipy读取图像。但是它不接受scipy.misc.imread部分。这可能是什么原因?

>>> import scipy
>>> scipy.misc
<module 'scipy.misc' from 'C:\Python27\lib\site-packages\scipy\misc\__init__.pyc'>
>>> scipy.misc.imread('test.tif')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    scipy.misc.imread('test.tif')
AttributeError: 'module' object has no attribute 'imread'

你使用的是哪个版本的scipy?对我来说,scipy.__version__显示为0.9.0,我无法重现你的问题。 - hannes
我可以在Scipy版本0.10.1上重现这个问题。 - Wilduck
4
我认为这个函数依赖于安装了PIL(http://www.pythonware.com/products/pil/)。你有安装PIL吗? - Wilduck
12
imread在SciPy 1.0.0中已被弃用,并在1.2.0中移除。 请改用imageio.imread - Manas
@Manas Bhardwaj,imageioscipy.misc的替代品吗?因为在scipy.misc中有imresize功能,但在imageio中没有。有人能帮我解决这个问题吗?谢谢。 - saichand
显示剩余6条评论
18个回答

172

imread 在SciPy 1.0.0中已被弃用,并将在1.2.0中移除。 请改用imageio.imread

import imageio
im = imageio.imread('astronaut.png')
im.shape  # im is a numpy array
(512, 512, 3)
imageio.imwrite('imageio:astronaut-gray.jpg', im[:, :, 0])

31
SciPy的imread曾经返回一个numpy.ndarray。而imageio.imread返回imageio.core.util.Array。如果你需要一个numpy.ndarray,又不想进行转换,可以使用matplotlib.pyplot.imread,因为它也返回一个numpy.ndarray。 - Stefan
3
我这里有一个类似的问题,但涉及到“imresize”函数。以前我使用“scipy.misc.imresize”时可以正常工作,但现在已经过时了,我应该从哪里找到替代品呢?请帮我翻译一下。 - saichand
1
@filip,我尝试使用scipy.misc.imresize。现在它不起作用了,但是我曾经使用过它。 我希望您可以纠正我在那个评论中所说的任何错误,而不是把它当作一个笑话。我愿意从我的错误中学习。我的评论有什么问题吗?谢谢。 - saichand
2
当编写自己的代码时,请使用更新的替代方案。但是,如果要运行一些您了解很少的代码,则更容易安装旧版scipy,例如在conda中conda install scipy==1.2.1。似乎没有imread和imresize的即插即用替换方案。 - Caranown
@Stefan 实际上,imageio.core.util.Array(实际上是ndarray子类)和np.ndarray之间几乎没有区别,除了额外的_meta字段。如果您不需要元数据,可以简单地调用np.asarray(iio.imread(...))将其丢弃;由于没有要转换的内容,因此“转换”非常高效。还请注意,mpl在内部将所有内容转发到pillow,而imageio可能会使用其他后端,如果pillow对格式的支持不太好(TIFF)或不存在(原始格式、视频等)。 - FirefoxMetzger
显示剩余3条评论

146

您需要安装Pillow(前身为PIL)。根据scipy.misc文档

请注意,Pillow不是SciPy的依赖项,但是在下面的列表中指示的图像操作函数如果没有安装它将无法使用:

...

imread

...

安装完Pillow后,我可以按如下方式访问imread

In [1]: import scipy.misc

In [2]: scipy.misc.imread
Out[2]: <function scipy.misc.pilutil.imread>

21
现在应该使用Pillow而不是PIL。参考文献:https://pillow.readthedocs.org/ - Yuchen
6
请注意,也要阅读下一个答案(@Shadab的答案),并且注意它只是imageio,而不是scipy.imageio - Terry Brown
7
请注意,这不适用于最新版本的SciPy(1.3.0)。 Shadab的解决方案可行。 - Nikhil Gupta
4
针对任何最新的 SciPy 版本(>=1.2),该答案已过时。 - Pieter Meiresone
无论我如何安装它,似乎都无法让Pillow正常工作。它总是显示没有找到Pillow模块,并且在重新安装时也会提示“Requirement already satisfied: Pillow in /usr/local/lib/python3.9/site-packages (8.3.1)”。可能是非标准路径问题或者brew问题,但我不确定该如何解决。而使用“imageio”解决方案就可以正常工作。我以前已经成功安装并使用过Pillow,所以不知道出了什么问题。 - jsky
显示剩余3条评论

62

imread在1.2.0版本之后被弃用了!为了解决这个问题,我不得不安装1.1.0版本。

pip install scipy==1.1.0

3
看看@Shadab的回答,现在已经在imageio中实现了。 - Terry Brown
它从1.3.0开始被移除,因此最新可安装的版本至少为1.2.1。 - Caranown
2
卸载和安装旧版本并不是解决方案。 - Pieter Meiresone

43

对于Python 3,最好使用matplotlib.pyplot中的imread

from matplotlib.pyplot import imread

5
不是这样的。Matplotlib会将数据转换为浮点数类型。 cv2.imread() 函数会正确地保留图像的数据类型。 - Lucas

19

如果有人遇到相同的问题,请卸载 scipy 并安装 scipy==1.1.0。

$ pip uninstall scipy

$ pip install scipy==1.1.0

1
根据 @Pieter Meiresone 的说法,卸载并安装旧版本并不是解决方案。这可能会与其他依赖于scipy的软件包发生冲突。 - r.a.shehni

11

如已回答的,misc.imread在SciPy 1.0.0中已被弃用,并将在1.2.0中删除。 imageio是一种选择,它将返回类型为:

<class 'imageio.core.util.Image'>

但是不要使用imageio,而是使用cv2。

import cv2
im = cv2.imread('astronaut.png')

我将是这样的类型:<class 'numpy.ndarray'>

由于NumPy数组计算速度更快。


imageio可以工作,但cv2会出现错误:libpng警告:IHDR中的图像高度无效。 - sailfish009

9
你需要Python Imaging Library (PIL),但遗憾的是,PIL项目似乎已经被放弃了。特别是,它还没有移植到Python 3。因此,如果你想在Python 3中使用PIL功能,最好使用Pillow,这是PIL的半官方分支,并且似乎正在积极开发中。实际上,如果你需要现代的PIL实现,我建议使用Pillow。只需简单地运行pip install pillow即可。由于它使用与PIL相同的名称空间,因此基本上可以直接替换。你可能会问:“这个分支有多半官方?” Pillow文档的About页面说道:“随着时间的推移,自最后一次PIL发布以来的时间越长,新的PIL发布的可能性就越小。然而,我们还没有听到官方的“PIL已死”的声明。因此,如果你仍然想支持PIL,请首先在这里报告问题,然后在这里打开相应的Pillow票证。” 请提供第一个票证的链接,以便我们可以跟踪问题的上游。
然而,官方PIL网站上最新的PIL版本已经是2009年11月15日的了。我认为我们可以安全地宣布,在近八年没有新版本发布之后,Pillow已经成为了PIL的继承者。因此,即使您不需要Python 3支持,我建议您避免在PyPI中获取古老的PIL 1.1.6版本,并安装最新、兼容的Pillow版本。

9

按照以下命令安装Pillow库:

pip install pillow

注意,所选答案已过时。请参阅SciPy文档

请注意,Pillow(https://python-pillow.org/)不是SciPy的依赖项,但在下面列出的图像操作函数中没有它是无法使用的。


4

这对我有效!虽然我不理解为什么我的教授使用“from scipy.misc import imread”,而它在我的笔记本电脑上无法工作。 - ElleryL

3
python -m pip install pillow

这对我很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接