scipy.misc模块没有属性imread?

ust*_*etz 93 python installation dependencies scipy python-imaging-library

我试图用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'
Run Code Online (Sandbox Code Playgroud)

Wil*_*uck 126

您需要安装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>
Run Code Online (Sandbox Code Playgroud)

  • 它现在应该是Pillow而不是PIL.参考:https://pillow.readthedocs.org/ (19认同)
  • 请注意,这不适用于最新版本的 SciPy (1.3.0)。Shadab 的解决方案有效。 (5认同)
  • **还要阅读下一个答案**(@ Shadab的答案),请注意,它只是`imageio`,而不是`scipy.imageio`。 (2认同)
  • 任何最新 SciPy 版本 (&gt;= 1.2) 的答案都已过时。 (2认同)

小智 65

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])
Run Code Online (Sandbox Code Playgroud)

  • SciPy的结果用于返回numpy.ndarray。imageio.imread返回imageio.core.util.Array。如果您想要/需要一个numpy.ndarray并且不想转换它,请使用matplotlib.pyplot.imread,因为它还会返回一个numpy.ndarray。 (3认同)
  • 我这里也有类似的问题,但是关于“imresize”。以前,“scipy.misc.imresize”可以工作。现在它已被弃用,我在哪里可以找到替代方案? (3认同)
  • 编写自己的代码时,请使用更新的替代方案。但是,当尝试运行一些您知之甚少的代码时,安装旧的 scipy 版本会更容易,例如在 conda `conda install scipy==1.2.1` 中。imread 和 imresize 似乎没有直接替代品。 (2认同)

mah*_*eju 20

版本1.2.0之后,imread贬值!因此,要解决此问题,我必须安装版本1.1.0。

pip install scipy==1.1.0
Run Code Online (Sandbox Code Playgroud)

  • 看到@Shadab的答案,它现在在`imageio`中。 (2认同)
  • 删除并安装旧版本并不是解决方案。 (2认同)

Mas*_*edi 15

对于Python 3,最好是使用imreadmatplotlib.pyplot

from matplotlib.pyplot import imread
Run Code Online (Sandbox Code Playgroud)

  • 不,这不对。MatPlotlib 转换为“float”。`cv2.imread()` 正确保留图像的数据类型。 (4认同)

Jos*_*sen 8

你需要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.


小智 8

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

<class 'imageio.core.util.Image'>
Run Code Online (Sandbox Code Playgroud)

但不是 imageio,而是使用 cv2

import cv2
im = cv2.imread('astronaut.png')
Run Code Online (Sandbox Code Playgroud)

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

由于 numpy 数组的计算速度更快。


Sup*_*ova 7

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

$ pip uninstall scipy

$ pip install scipy==1.1.0
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 6

通过以下命令安装枕头库:

pip install pillow
Run Code Online (Sandbox Code Playgroud)

请注意,所选答案已过时。查看SciPy的文档

请注意,Pillow(https://python-pillow.org/)不是SciPy的依赖项,但是如果没有它,下面列表中指示的图像处理功能将不可用。