在Python中从.png获取RGBA值

2024-05-06 23:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一个项目,我需要从图像中获取RGBA值,并在以后的计算中使用它们。为此,我一直在使用即时获取数据()因为这给了我列表中列表格式的值,所以我编写了一些代码将其放入一个长列表中。在

for group in pix_val:
    for item in group:
        pix_val_flat.append(item)

这对我来说非常有效,直到我用一个完全白色的图像测试了代码。它没有在一个列表中生成4个值的集合,而是给了我一个长列表——这意味着当我的程序试图使列表变平时,我会出错。有人知道为什么会这样吗?我该怎么解决?在

这是我的代码:

^{pr2}$

以下是错误消息:

Traceback (most recent call last):
    File "/program", line 286 in <module>
        for item in group:
    TypeError: 'int' object is not iterable

Tags: 项目代码in图像列表for格式group
3条回答

尝试类似list(im.getdata())numpy.array(im.getdata())(第一个可能更好)它以某种方式返回一个长列表而不是一个列表列表,这可能会减轻这种情况。另一个选择是使用类似imageio.imread(filename)的东西,它以numpy数组而不是序列的形式返回像素值。然后,可以像在任何其他数组中一样引用数组维度。(例如,image[:, :, 0]会给你所有的R值。)

编辑了我的代码行,现在可以工作了:

im=Image.open("/filelocation").convert('RGBA')

为什么不直接使用img.load()它使处理单个像素更容易。在

from PIL import Image

img=Image.open("n.png")
pixels = img.load()

pix_val_flat = [v for c in [[x,y] for x in range(img.size[0]) for y in range(img.size[1])] for v in pixels[c[0],c[1]]]

相关问题 更多 >