scipy.misc 模块没有属性 imread?

Posted

技术标签:

【中文标题】scipy.misc 模块没有属性 imread?【英文标题】:scipy.misc module has no attribute imread? 【发布时间】:2013-02-27 01:18:57 【问题描述】:

我正在尝试使用 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,我无法重现您的问题 如果你先from scipy.misc import imread,然后imread('test.tif'),你会得到同样的错误吗? @karthikr 是的,我得到了同样的错误。 我认为这个功能取决于安装的 PIL (pythonware.com/products/pil)。你有 PIL 吗? imread 在 SciPy 1.0.0 中被弃用,并在 1.2.0 中被删除。请改用imageio.imread 【参考方案1】:

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

【讨论】:

SciPy 的 imread 用于返回 numpy.ndarray。 imageio.imread 返回 imageio.core.util.Array。如果你想要/需要一个 numpy.ndarray 并且不想转换它,请使用 matplotlib.pyplot.imread,因为它也返回一个 numpy.ndarray。 我在这里也有类似的问题,但是关于imresize。以前,scipy.misc.imresize 有效。现在它已被弃用,我将在哪里获得替代方案? 开个玩笑@saichand @filip,我尝试使用 scipy.misc.imresize。它现在不起作用,但我曾经使用过它。如果我所说的评论中有任何错误,我希望你能纠正我,而不是开玩笑。我愿意从错误中学习。我的评论有什么问题?谢谢。 好吧,我不得不承认,当时我对我的评论有点沮丧,我写了它:P。我的意思是,他们没有为 windows 上的 scipy 提供低于 1.0 的***或安装是一个笑话。如果您仍然想使用它,只需使用 scipy==1.2.0 因为它仍然可用(只是标记为已弃用,仍然有效!)@saichand【参考方案2】:

您需要安装Pillow(以前的PIL)。来自the docsscipy.misc

请注意,Pillow 不是 SciPy 的依赖项,但没有它,下面列表中指示的图像处理功能将不可用:

...

imread

...

安装 Pillow 后,我可以访问imread,如下:

In [1]: import scipy.misc

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

【讨论】:

Orz,但是如果我安装PIL,那么它会给我&lt;PngImagePlugin.PngImageFile... 现在应该是 Pillow 而不是 PIL。参考:pillow.readthedocs.org 阅读下一个答案(@Shadab 的回答),注意它只是imageio,而不是scipy.imageio 请注意,这不适用于最新版本的 SciPy (1.3.0)。 Shadab 的解决方案有效。 任何最新 SciPy 版本 (>= 1.2) 的过时答案。【参考方案3】:

imread 在 1.2.0 版本之后被贬值了! 所以要解决这个问题,我必须安装 1.1.0 版。

pip install scipy==1.1.0

【讨论】:

查看@Shadab 的答案,现在在imageio 从1.3.0开始被移除,所以最新安装的至少是1.2.1 删除和安装旧版本不是解决方案。【参考方案4】:

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

from matplotlib.pyplot import imread

【讨论】:

不,不是。 MatPlotlib 转换为floatcv2.imread() 正确保留了图像的 dtype。【参考方案5】:

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

$ pip uninstall scipy

$ pip install scipy==1.1.0

【讨论】:

【参考方案6】:

您需要 Python 映像库 (PIL),但可惜! PIL 项目似乎已被放弃。特别是,它还没有被移植到 Python 3。所以如果你想要 Python 3 中的 PIL 功能,你最好使用Pillow,它是 PIL 的半官方分支,似乎正在积极开发中。实际上,如果你需要一个现代的 PIL 实现,我会推荐 Pillow。就像pip install pillow 一样简单。由于它使用与 PIL 相同的命名空间,因此它本质上是一个替代品。

这个分叉有多“半官方”?你可能会问。 Pillow 文档的About 页面这样说:

自上次 PIL 发布以来,随着时间的推移,出现 新的 PIL 版本减少。但是,我们还没有听到官方的“PIL 死了”的公告。所以如果你还想支持PIL,请 先在此处报告问题,然后在此处打开相应的 Pillow 票证。

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

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

【讨论】:

【参考方案7】:

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

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

但不是 imageio,而是使用 cv2

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

im 的类型为: &lt;class 'numpy.ndarray'&gt;

因为 numpy 数组的计算速度更快。

【讨论】:

imageio 工作,但 cv2 导致错误:libpng 警告:IHDR 中的图像高度无效【参考方案8】:

通过以下命令安装 Pillow 库:

pip install pillow

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

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

【讨论】:

【参考方案9】:

Imread 使用 PIL 库,如果安装了库,请使用: "从 scipy.ndimage 导入 imread"

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

【讨论】:

这对我有用!虽然我不明白为什么我的教授使用“from scipy.misc import imread”并且它在我的笔记本电脑上不起作用【参考方案10】:
python -m pip install pillow

这对我有用。

【讨论】:

【参考方案11】:

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

【讨论】:

它与问题无关。这是一个不同的问题和答案。【参考方案12】:

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

【讨论】:

关于已接受答案的评论已经指出应该使用pillow 而不是PIL。我认为将其添加为答案并不是一个坏主意,但是如果您解释原因,它将更加有用。谢谢。【参考方案13】:

我有在 jupyter notebook 上提取图像所需的所有包,但即便如此,它仍显示相同的错误。

Error on Jupyter Notebook

看了上面的cmets,我已经安装了所需的包。请告诉我是否错过了一些包裹。

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

scipy==1.2.1

【讨论】:

【参考方案14】:

在 python 3.6 中对我有用的解决方案如下

py -m pip install Pillow

【讨论】:

【参考方案15】:

我获得 .png 文件的唯一方法是使用 OpenCv。

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

【讨论】:

【参考方案16】:

您必须先安装与 scipy (

conda install -c anaconda scipy==1.0

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

pip install pillow

【讨论】:

【参考方案17】:

imread 在 scipy.misc 中已弃用;请改用 imageio.imread。

imageio 提供与 Scipy 相同的功能。但请记住,有些参数需要更改(详细信息请查看here):

    使用 pilmode 关键字参数代替 mode。 使用 as_gray 关键字参数代替 flatten

【讨论】:

【参考方案18】:

一种方法是像这样使用 PIL:

    from PIL import Image
    input_image = Image.open(filename)

【讨论】:

以上是关于scipy.misc 模块没有属性 imread?的主要内容,如果未能解决你的问题,请参考以下文章

搞定Python中from scipy.misc import imread & imresize 报错问题

python使用scipy.misc import imread报错:ImportError: cannot import name imread

无需降级scipy,解决AttributeError: module ‘scipy.misc’ has no attribute ‘imread’,imresize,imsave问题

module ‘scipy.misc‘ has no attribute ‘imread‘

python使用scipy.misc import imread报错:ImportError: cannot import name imread

成功解决Exception “unhandled ImportError“cannot import name ‘imread‘ from ‘scipy.misc‘