【问题标题】:Issues converting RGB to image with correct size将 RGB 转换为正确尺寸的图像的问题
【发布时间】:2021-10-09 01:32:17
【问题描述】:

我有一个 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() 获得了这些数据,并出于不同的原因将其转换为二维列表(此列表称为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() 放入它们的顺序(据我假设,这是标准的从左到右和从上到下的渲染)。

【问题讨论】:

  • 你能得到all_data的长度吗?如果 len(all_data) 的输出不是 1280*720,那么我们知道创建数组有问题。如果是,那么图像的填充方式存在问题。
  • @shadow-kris 是的,我可以确认 len(all_data) 是 921600(或 1280*720)。
  • 这很有趣,我得到一个完全不同的错误:TypeError: color must be int or tuple
  • @MarkRansom 您使用的是什么列表,因为该错误不应该与所有 int 数据一起出现?
  • PythonMan1029:请提供minimal reproducible example(即小得多的图像并将所有数据放入您的问题中)。

标签: python image image-processing python-imaging-library rgb


【解决方案1】:

因此,图像库要求 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()

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 2018-08-24
    • 2015-04-05
    • 2021-11-30
    • 2018-11-12
    • 2017-08-15
    • 2012-06-17
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多