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

List all RGBA values of an image with PIL

我需要列表中图像的所有 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)

有什么建议吗?谢谢

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