pgm*_*ank 3 image scipy python-import importerror
在尝试导入或直接使用scipy.misc模块中包含的任何图像函数时,我遇到了两种错误。以下是该imread()函数的两个错误示例:
>>> from scipy.misc import imread
ImportError: cannot import name 'imread' from 'scipy.misc'
Run Code Online (Sandbox Code Playgroud)
和
>>> import scipy.misc
>>> scipy.misc.imread
AttributeError: module 'scipy.misc' has no attribute 'imread'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
你没有做错任何事。这是由于从scipy.miscSciPy 版本 1.2.0 开始从模块中删除了图像函数。我不知道为什么他们认为这些功能已弃用并删除了它们,但是如果您想使用它们,您可以通过卸载当前版本并安装以前的版本来回滚到以前的 SciPy 版本:
pip uninstall scipy
pip install scipy==1.1.0
Run Code Online (Sandbox Code Playgroud)
确保你也Pillow安装了:
pip install Pillow
Run Code Online (Sandbox Code Playgroud)
如果您不想使用旧版本的 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
Run Code Online (Sandbox Code Playgroud)
并导入它们:
import numpy as np, Pillow, skimage, imageio, matplotlib
Run Code Online (Sandbox Code Playgroud)
此外,我引用了我发现的两个来源,提到了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 关键字参数代替 mode。
- 使用 as_gray 关键字参数代替 flatten。
- 上述参数的文档不在 imread 上,而是在各个格式的文档上,例如 PNG。
- Imageio 的函数都返回 numpy 数组,尽管是作为子类(以便可以附加元数据)。
| 归档时间: |
|
| 查看次数: |
5396 次 |
| 最近记录: |