<分区>
我正在使用 Pillow 进行一些图像操作,并想计算 PNG 或 JPG 图像文件中有多少种独特的颜色。我可以使用具有少量颜色的模式“P”图像轻松做到这一点,但它不适用于 RGB 或 RGBA 图像。阅读 Pillow 的文档,如果颜色超过 256 种,Image.getcolors()
似乎返回 None
。
最好的方法是什么?我们可以用 Pillow 来做吗?我的目标是纯 Python + Pillow,但如果有帮助,我可以选择在我的依赖项列表中包含 numpy。
<分区>
我正在使用 Pillow 进行一些图像操作,并想计算 PNG 或 JPG 图像文件中有多少种独特的颜色。我可以使用具有少量颜色的模式“P”图像轻松做到这一点,但它不适用于 RGB 或 RGBA 图像。阅读 Pillow 的文档,如果颜色超过 256 种,Image.getcolors()
似乎返回 None
。
最好的方法是什么?我们可以用 Pillow 来做吗?我的目标是纯 Python + Pillow,但如果有帮助,我可以选择在我的依赖项列表中包含 numpy。
最佳答案
一种可能的解决方案(我用 Base64 对 PNG 图像进行了编码):
from PIL import Image
from io import BytesIO
import base64
data = '''iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+ACCAAXMEa+fpcAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAx9JREFUeNrt3MtNA1EMQFGMpqWIgpAiakJKA6mBBrJOL2wfBYQVDrI9c85+8pnPlWfxXrxQbSWPD6eQv3p1CkAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEAurKWPC+1nv/z/S315efLzT2ICQAQAEAAAAEABAAQAEAAAAEABAAEABAAQAAAAQAEABAAYH+sxc4r3Q8g6+vju/T7r6e7e9gEAAgAIACAAAACAAgAIACAAAACAAgAIACAAAACAAgAIADAo236H1jJ45+wmDz1EefLbfR+ApgAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAD4F5tTcGzX0736J4SrYAIABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAOBB+X4AK3l85D+C2bdAtdH7GZgAwCsAIACAAAACAAgAIACAAAACAAgAIACAAAACAAgAIABAWx3WMq+yg12A2Rd/H9ev9BYwAYBXAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAgLaesRb50Ov5ofgBTH2ECQC8AgACAAgAIACAAAACAAgAIACAAAACAAgAIACAAAACALS1OQWMtop3lIgYffpMAOAVABAAQAAAAQAEABAAQAAAAQAEABAAQAAAAQAEABAAoC37ATBbdj1+9X4CJgBAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAH5nPwCOLbufgAkAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAQAEABAAAABAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAKBKNPgNq+xgqH+ASp9BEwB4BQAEABAAQAAAAQAEABAAQAAAAQAEABAAQAAAAQAEAGgrdvAf7CdA5QMw+hkyAYBXAEAAAAEABAAQAEAAAAEABAAQAEAAAAEABAAQAEAAgLbCKbAlgGfABAAIACAAgAAAAgAIACAAgAAAAgAIACAAgAAAAgAIACAAQDs/+5skuT18qwIAAAAASUVORK5CYII='''
img = Image.open(BytesIO(base64.b64decode(data)))
unique_colors = set()
for i in range(img.size[0]):
for j in range(img.size[1]):
pixel = img.getpixel((i, j))
unique_colors.add(pixel)
print('Image info = ', img)
print('Unique color count = ', len(unique_colors))
打印:
Image info = <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x7FFFF670A400>
Unique color count = 7
关于python - 使用 Python 和 Pillow,我们如何计算 PNG 或 JPG 图像中唯一颜色的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51387662/