【问题标题】:AttributeError, ImportError on scipy.misc image functions (e.x imread, imresize, imsave, imshow etc.)scipy.misc 图像函数(例如 imread、imresize、imsave、imshow 等)上的 AttributeError、ImportError
【发布时间】:2020-01-07 19:38:05
【问题描述】:

在尝试导入或直接使用 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'

我做错了什么?

【问题讨论】:

    标签: image scipy python-import importerror


    【解决方案1】:

    你没有做错任何事。这是由于自 SciPy 版本 1.2.0 以来的removal of the image functions from the scipy.misc module。我不知道他们为什么认为这些功能已弃用并删除它们,但如果您想使用它们,您可以通过卸载当前版本并安装以前的 SciPy 版本来回滚到以前的 SciPy 版本:

    pip uninstall scipy
    pip install scipy==1.1.0
    

    确保您也安装了Pillow

    pip install Pillow
    

    如果您不想使用旧版本的 SciPy,则需要更改代码。根据每个已弃用函数的官方文档,以下是 SciPy 的建议:

    • fromimage(im) -> np.asarray(im)
    • imfilter() -> 直接使用 Pillow 过滤功能。
    • 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.github.io

    scipy.misc 中的以下函数已弃用:bytescalefromimageimfilterimreadimresizeimrotateimsave、@9876543554@ 和 @9876@45。这些函数中的大多数都有意想不到的行为(比如在没有用户要求的情况下重新缩放和类型转换图像数据)。其他函数只是有更好的选择。

    来自imageio.readthedocs.io(尤其是imread):

    从 Scipy 的 imread 转换

    Scipy 正在弃用其图像 I/O 功能。

    本文档旨在帮助来自 Scipy 的人们适应 Imageio 的 imread 函数。我们建议阅读用户 api 和 查看一些示例以了解 imageio。

    Imageio 利用各种插件来支持读取图像(以及 卷/电影)来自许多不同的格式。幸运的是,枕头是 通用图像的主要插件,与使用的库相同 通过 Scipy 的阅读。请注意,Imageio 会自动选择一个插件 基于要读取的图像(除非明确指定格式), 但尽可能使用 Pillow。

    简而言之:对于以前由 Scipy 的 imread 读取的图像,imageio 通常也应该使用 Pillow,并且 imageio 提供相同的 在这些情况下作为 Scipy 的功能。但请记住:

    • 使用 pilmode 关键字参数代替模式。
    • 使用 as_gray 关键字参数代替展平。
    • 上述参数的文档不在 imread 上,而是在各个格式的文档上,例如PNG。
    • Imageio 的函数都返回 numpy 数组,尽管它是一个子类(以便可以附加元数据)。

    【讨论】:

    • 或者,更好的是,直接使用 Pillow 和/或 scikit-image 中的替换
    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2020-07-22
    • 2019-10-05
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多