【问题标题】:Open / load image as numpy ndarray directly直接打开/加载图像为 numpy ndarray
【发布时间】:2018-10-21 04:21:12
【问题描述】:

我曾经使用 scipy 将图像从文件直接加载到 ndarray 中。

from scipy import misc
img = misc.imread('./myimage.jpg')
type(img)
>>> numpy.ndarray

但现在它给了我DeprecationWarningdocs say it will be removed in 1.2.0.,我应该改用 imageio.imread。但是:

import imageio
img = imageio.imread('./myimage.jpg')
type(img)
>>> imageio.core.util.Image

我可以通过这样做来转换它

img = numpy.array(img)

但这似乎很老套。有什么方法可以像我之前使用 scipy 的 misc.imread (除了使用 OpenCV)那样将图像直接加载到 numpy 数组中吗?

【问题讨论】:

    标签: python image numpy scipy numpy-ndarray


    【解决方案1】:

    imageio.imread 的结果已经是一个 NumPy 数组; imageio.core.util.Image 是一个 ndarray 子类,主要存在因此该数组可以有一个 meta 属性来保存图像元数据。

    如果你想要一个完全是numpy.ndarray类型的对象,你可以使用asarray

    array = numpy.asarray(img)
    

    numpy.array(img) 不同,这不会复制img 的数据。

    【讨论】:

    • 假设你这样做并且你最终在那个数组中得到了两个图像。您如何获得该数组的第 i 个项目,即特定图像(例如第二个)?
    • @SanderW.vanderLaan:文档说imread 读取一个图像,所以我不知道你怎么能得到两个。
    • 啊,是的!当然!我有这段代码for level in args.levels.split(","): if level == 'm': img = fimage.associated_images["macro"] else: level = int(level) img = fimage.read_region((0, 0), level, fimage.level_dimensions[level]) img = np.asarray(img)[:,:, 0:3],但我完全没有意识到 for 循环。因此,对于每个项目,它将生成一个图像并将其放入一个数组中。奇怪的是你帮了我很多@user2357112-supports-monica!
    猜你喜欢
    • 1970-01-01
    • 2013-09-04
    • 2017-10-18
    • 1970-01-01
    • 2021-04-07
    • 2013-09-22
    • 1970-01-01
    • 2015-05-21
    • 2018-10-10
    相关资源
    最近更新 更多