首页 > 解决方案 > 将 RGB 转换为正确尺寸的图像的问题

问题描述

我在一个看起来像这样的列表中有一个大小为 1280x720 的图像的 RGB 值数据:

[[102, 107, 111],
 [101, 106, 110],
 [100, 105, 109],
 [100, 105, 109],
 [101, 106, 109],
 [103, 108, 111],
 [105, 110, 113],
             ...]

由于不同的原因,我从中获取了这些数据Image.getdata()并将其转换为 2d 列表(此列表称为all_data)。但是,当我尝试使用下面的代码将大小设置为我想要的大小时,我得到一个TypeError: too many data entries.

from PIL import Image
import numpy as np

image_out = Image.new(mode = "RGB", size = (1280, 720))
image_out.putdata(all_data)
image_out.show()

这可能不是正确的方法,所以如果有人知道我应该去哪里,请告诉我。正如预期的那样,我有 1280*720 像素的数据,这些数据应该按照Image.getdata()放入它们的顺序(据我假设,这是一个标准的从左到右和从上到下的渲染)。

标签: pythonimageimage-processingpython-imaging-libraryrgb

解决方案


因此,图像库要求 rgb 数据是元组,而不是列表。我无法找到文档中明确提到的这一点,但通过我自己的测试对其进行了验证。所有文档示例也使用整数或元组(https://hhsprings.bitbucket.io/docs/programming/examples/python/PIL/Image__class_Image.html#id1

从列表列表到元组列表的转换可以通过以下行完成:

tuples = [tuple(x) for x in all_data]

在上下文中:

from PIL import Image
import numpy as np

image_out = Image.new(mode = "RGB", size = (1280, 720))
tuples = [tuple(x) for x in all_data]
image_out.putdata(tuples)
image_out.show()

推荐阅读