image - scipy.misc 图像函数(例如 imread、imresize、imsave、imshow 等)上的 AttributeError、ImportError
问题描述
scipy.misc
在尝试导入或直接使用模块中包含的任何图像功能时,我遇到了两种错误。以下是该imread()
函数的两个错误示例:
>>> from scipy.misc import imread
ImportError: cannot import name 'imread' from 'scipy.misc'
和
>>> import scipy.misc
>>> scipy.misc.imread
AttributeError: module 'scipy.misc' has no attribute 'imread'
我究竟做错了什么?
解决方案
你没有做错任何事。这是由于自 SciPy 版本 1.2.0 以来从模块中删除了图像功能。scipy.misc
我不知道他们为什么认为这些功能已被弃用并删除,但如果你想使用它们,你可以通过卸载当前版本并安装以前的 SciPy 版本来回滚到以前的 SciPy 版本:
pip uninstall scipy
pip install scipy==1.1.0
确保你也Pillow
安装了:
pip install Pillow
如果您不想使用旧版本的 SciPy,则需要更改代码。根据每个已弃用函数的官方文档,以下是 SciPy 的建议:
fromimage(im)
->np.asarray(im)
imfilter()
-> 直接使用枕头过滤功能。imread()
->imageio.imread()
imsave()
->imageio.imwrite()
imresize()
->numpy.array(Image.fromarray(arr).resize())
imrotate
->skimage.transform.rotate()
imshow()
->matplotlib.pyplot.imshow()
toimage()
->Image.fromarray()
它假定安装以下库:
pip install numpy Pillow scikit-image imageio matplotlib
并导入它们:
import numpy as np, Pillow, skimage, imageio, matplotlib
此外,我引用了我找到的两个来源,提到了scipy.misc
图像 I/O 功能的弃用:
不推荐使用以下函数
scipy.misc
:bytescale
、fromimage
、imfilter
、imread
、imresize
、imrotate
、imsave
和。这些函数中的大多数都有意想不到的行为(比如在没有用户要求的情况下重新缩放和类型转换图像数据)。其他功能只是有更好的选择。imshow
toimage
来自imageio.readthedocs.io(尤其是对于imread
):
从 Scipy 的 imread 过渡
Scipy 正在弃用他们的图像 I/O 功能。
本文档旨在帮助来自 Scipy 的人适应 Imageio 的 imread 功能。我们建议阅读用户 api 并查看一些示例以了解 imageio。
Imageio 利用各种插件来支持从许多不同格式读取图像(和卷/电影)。幸运的是,Pillow 是常用图像的主要插件,与 Scipy 的 imread 使用的库相同。请注意,Imageio 会根据要读取的图像自动选择插件(除非明确指定格式),但会尽可能使用 Pillow。
简而言之:对于以前由 Scipy 的 imread 读取的图像,imageio 通常也应该使用 Pillow,并且在这些情况下 imageio 提供与 Scipy 相同的功能。但请记住:
- 使用 pilmode 关键字参数代替模式。
- 使用 as_gray 关键字参数代替展平。
- 上述参数的文档不在 imread 上,而是在各个格式的文档上,例如 PNG。
- Imageio 的函数都返回 numpy 数组,尽管它是一个子类(以便可以附加元数据)。
推荐阅读
- google-cloud-platform - 我在 GCP 上安装了 WordPress,当我停止并恢复实例时它不起作用
- reactjs - 在 react 中使用 Redux Toolkit 的 createEntityAdapter 时出错
- laravel - 如何从 Laravel 7 项目中删除引导程序
- mysql - Dockerized NodeJS API 无法连接到 MySQL 容器,getaddrinfo ENOTFOUND
- python - Pytorch-Lightning 是否具有多处理(或 Joblib)模块?
- angular - Angular Karma 测试 - ReferenceError:未定义条纹
- reactjs - 使用 switch 反应条件渲染
- css - 如何对齐CSS列中的多个项目
- javascript - 如何允许用户通过我自己的 Google Scripts Web App 编辑我的表格文件?
- c++ - 收集项目中所有 DLL 的更有效方法