使用Python和Pillow,我们如何计算PNG或JPG图像中唯一颜色的数量?

使用Python和Pillow,我们如何计算PNG或JPG图像中唯一颜色的数量?,python,png,jpeg,python-imaging-library,pillow,Python,Png,Jpeg,Python Imaging Library,Pillow,我使用枕头做一些图像操作,并想计算有多少独特的颜色在一个PNG或JPG图像文件。我可以用少量颜色的模式“P”图像轻松完成,但它不适用于RGB或RGBA图像。通过阅读枕头的文档,如果颜色超过256种,则似乎Image.getcolors()返回None 最好的方法是什么?我们可以用枕头吗?我的目标是纯Python+Pillow,但如果有帮助,我可以选择将numpy包含在依赖项列表中。是否可以列出像素RGB并进行扫描?正如John Anderson所说,您可以使用Image.getcolors来实现

我使用枕头做一些图像操作,并想计算有多少独特的颜色在一个PNG或JPG图像文件。我可以用少量颜色的模式“P”图像轻松完成,但它不适用于RGB或RGBA图像。通过阅读枕头的文档,如果颜色超过256种,则似乎
Image.getcolors()
返回
None


最好的方法是什么?我们可以用枕头吗?我的目标是纯Python+Pillow,但如果有帮助,我可以选择将numpy包含在依赖项列表中。

是否可以列出像素RGB并进行扫描?正如John Anderson所说,您可以使用Image.getcolors来实现这一点。但要获得唯一变量的数量,您可以将其转换为一个集合,该集合删除重复项,然后使用
len(set(list))

一个可能的解决方案(我将PNG图像编码为Base64):

印刷品:

Image info =  <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x7FFFF670A400>
Unique color count =  7
图像信息=
唯一颜色计数=7

循环所有像素并将它们添加到
集合中
图像.getcolors()
的默认最大值为256,但您可以将其更改为
图像.getcolors(maxcolors=1024)
或您需要的任何内容。实际上,如果我打开JPEG照片,
图像.getcolors()
返回
,即使我用
maxcolors=
来称呼它。。。它不应该也适用于RGB JPEG文件吗?是的,这是Andrej Kesey建议的方法。而且它似乎如预期的那样起作用。我希望能找到更快的方法。但也许这是枕头能做的最好的了。它似乎和预期的一样工作。我希望能有更快的方法。但也许这是枕头能做的最好的了……我能够使用一套理解工具在一些大图像上刮几秒钟,这似乎运行得更快:
unique_colors={img.getpixel((x,y))表示范围内的x(w)表示范围内的y(h)}
Image info =  <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x7FFFF670A400>
Unique color count =  7