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