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,那么它会给我<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 转换为float
。 cv2.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 的类型为:
<class 'numpy.ndarray'>
因为 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.ndarray
和dtype=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‘