scipy.misc模块没有属性imread?

时间:2013-03-11 18:24:03

标签: python installation scipy dependencies 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'

16 个答案:

答案 0 :(得分:116)

您需要安装Pillow(以前为PIL)。来自scipy.misc上的the docs

  

请注意,Pillow不是SciPy的依赖项,但如果没有它,下面列表中显示的图像处理函数将无法使用:

     

...

     

imread

     

...

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

In [1]: import scipy.misc

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

答案 1 :(得分:21)

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])

答案 2 :(得分: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,请   首先在这里报告问题,然后在这里打开相应的枕头票。

     

请提供第一张票的链接,以便我们跟踪问题   上游。

然而,official PIL site上最新的PIL发布时间是2009年11月15日。我认为我们可以安全地宣布枕头作为PIL的继承者(截至撰写本文时)近八年没有新发布。因此,即使您不需要Python 3支持,我建议您避开PyPI中可用的古老PIL 1.1.6发行版,只需安装新的,最新的兼容Pillow。

答案 3 :(得分:6)

按照以下命令安装Pillow库:

pip install pillow

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

  

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

答案 4 :(得分:5)

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

from matplotlib.pyplot import imread

答案 5 :(得分:3)

Imread使用PIL库,如果安装了库使用: &#34;来自scipy.ndimage import imread&#34;

来源:http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.ndimage.imread.html

答案 6 :(得分:2)

python -m pip install pillow

这对我有用。

答案 7 :(得分:2)

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

$ pip uninstall scipy

$ pip install scipy==1.1.0

答案 8 :(得分:1)

正如所回答的,misc.imread在SciPy 1.0.0中已弃用,并将在1.2.0中删除。 imageio是一个选项,它将返回类型为

的对象
<class 'imageio.core.util.Image'>

但是使用cv2

而不是imageio
import cv2
im = cv2.imread('astronaut.png')

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

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

答案 9 :(得分:0)

你需要一个python图像库(PIL),但现在只有PIL是不够的,你最好安装Pillow。这很有效。

答案 10 :(得分:0)

在Jupyter Notebook中运行以下命令,我收到类似的错误消息:

from skimage import data
photo_data = misc.imread('C:/Users/ers.jpg')
type(photo_data)

“错误”消息:

  

D:\ Program Files(x86)\ Microsoft Visual   Studio \ Shared \ Anaconda3_64 \ lib \ site-packages \ ipykernel_launcher.py:3:   弃用警告:imread已弃用! imread已弃用   SciPy 1.0.0,并将在1.2.0中删除。使用imageio.imread   代替。这与ipykernel软件包分开,因此我们可以避免   直到进口为止

并使用以下代码解决了该问题:

import matplotlib.pyplot
photo_data = matplotlib.pyplot.imread('C:/Users/ers.jpg')
type(photo_data)

答案 11 :(得分:0)

我在jupyter笔记本电脑上具有提取图像所需的所有软件包,但即使如此,它仍然显示相同的错误。

Error on Jupyter Notebook

阅读上面的评论,我已经安装了必需的软件包。请告诉我是否错过了一些包裹。

pip3 freeze | grep -i -E "pillow|scipy|scikit-image"
Pillow==5.4.1
scikit-image==0.14.2

scipy==1.2.1

答案 12 :(得分:0)

以下在python 3.6中适用于我的解决方案

  

py -m pip安装枕头

答案 13 :(得分:0)

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

pip install scipy==1.1.0

答案 14 :(得分:0)

我可以使用.png来获取正在使用的uint8文件的唯一方法是使用OpenCv。

cv2.imread(file)实际上返回了numpy.ndarraydtype=uint8

答案 15 :(得分:0)

您必须首先安装与 scipy (<3.7) 兼容的 Python 版本。 我无法使用 pip 安装 scipy 1.0 版 [我认为 pip 不再支持此版本] 并使用 conda 代替:

conda install -c anaconda scipy==1.0

然后要使用“imread”,您需要安装 Pillow。

pip install pillow