使用PIL列出图像的所有RGBA值

时间:2015-07-22 19:35:14

标签: python image python-imaging-library pillow

我需要列表中图像的所有RGBA值。我可以使用getpixel()函数,但我必须迭代所有像素,这是我的目标,它的速度非常慢。我需要在几秒钟内做到这一点。 这是我目前的代码:

imgobj = Image.open('x.png')
pixels = imgobj.convert('RGBA')
lofpixels = []
w = 1920
h = 1080
for i in range(w):
    for j in range(h):
        r,g,b,a = pixels.getpixel((i,j))
        lofpixels.append(r)
        lofpixels.append(g)
        lofpixels.append(b)
        lofpixels.append(a)

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

imgobj.getdata()会很快给你一系列(red, green, blue, alpha)元组。 (Docs here。)

不确定你的用例是什么,因为看起来你只是制作了一个大的平面阵列,你的所有红色,绿色,蓝色和alpha混杂在一起,但我想你可以做这样的事情来得到相同的结果:

imgobj = Image.open('x.png')
pixels = imgobj.convert('RGBA')
data = imgobj.getdata()
lofpixels = []
for pixel in data:
    lofpixels.extend(pixel)

您还可以使用collections.Counterdocs here)计算每个唯一像素值,例如:

imgobj = Image.open('x.png')
pixels = imgobj.convert('RGBA')
data = imgobj.getdata()
counts = collections.Counter(data)
print(counts[(0, 0, 0, 255)])  # or some other value