【问题标题】:Preserve 3-dimensionality when converting PIL image to numpy array将 PIL 图像转换为 numpy 数组时保留 3 维
【发布时间】:2020-02-17 12:15:48
【问题描述】:

我有一个 PIL 图像列表:p0、p1、...、p85999(总共 86000 个)。它们都是 RGB,大小为 30x30px。

我需要将它们转换为规范化的 numpy 数组,我做了以下操作:

[np.asarray(r).astype('float32') / 255.0) for r in images]

r 是 PIL 图像。

这给出了一个 numpy 数组的数组。

但是,这些数组有时形状为 (30,30,3),有时形状为 (30,30)

我希望他们始终保持良好状态(30,30,3)

我猜 numpy 这样做是出于性能原因(当 RGB 不是 需要,例如。白色图像?)。

无论如何,如何获得所需的结果 - 让所有 numpy 数组的大小为(30,30,3)

另外,理想情况下,我希望我的最终 numpy 数组的大小为 (30, 30, 3, 86000)。是否有直接从 PIL 图像创建这样一个数组的快捷方式?

【问题讨论】:

    标签: python arrays numpy image-processing


    【解决方案1】:

    我猜 numpy 这样做是出于性能原因

    Numpy 与它无关,这是您的 PIL Image 只有一个通道。 最简单的解决方案就是将convert一切都转成RGB:

    ims = [np.asarray(r.convert('RGB')).astype('float32') / 255.0) for r in images]
    

    如果您随后调用np.asarray(ims),您将获得一个形状为[N,30,30,3] 的数组,其中N 是图像的数量,然后您可以transpose 对其进行排序。

    【讨论】:

    • 但是,当我调用np.asarray(ims) 时,我得到一个形状为(N,2) 的数组,而不是所需的(N,30,30,3)
    • ims[0]的形状是什么?
    • 没关系,我想我在其他地方搞砸了。你写的是对的。
    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2011-02-15
    • 2019-11-29
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多