我需要列表中图像的所有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)
有什么建议吗?感谢。
答案 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.Counter
(docs 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