如何使用python PIL获取图像中的颜色集

如何使用python PIL获取图像中的颜色集,python,image,computer-vision,python-imaging-library,Python,Image,Computer Vision,Python Imaging Library,在使用python的PIL模块导入图像后,我希望获得图像中的颜色集,作为rgb元组列表 如果我事先知道只有两种颜色,而且图像非常小,可能是20x20像素,会怎么样?然而,我将在很多图像上运行这个算法。在我看到2种独特的颜色之前,在所有像素中循环会更有效吗?因为我知道循环在python中非常慢 首先,让我们制作一个图像。我将使用ImageMagick制作一个带有洋红色文字的蓝色背景: convert -size 300x120 -background blue -fill magenta -gra

在使用python的PIL模块导入图像后,我希望获得图像中的颜色集,作为rgb元组列表


如果我事先知道只有两种颜色,而且图像非常小,可能是20x20像素,会怎么样?然而,我将在很多图像上运行这个算法。在我看到2种独特的颜色之前,在所有像素中循环会更有效吗?因为我知道循环在python中非常慢

首先,让我们制作一个图像。我将使用ImageMagick制作一个带有洋红色文字的蓝色背景:

convert -size 300x120 -background blue -fill magenta -gravity center -font AppleChancery label:"StackOverflow" PNG24:image.png

正如你所见,我只指定了两种颜色-洋红色和蓝色,但PNG图像实际上包含200多种颜色,JPEG图像包含2370种不同的颜色

因此,如果我想得到两种主要颜色,我可以这样做:

from PIL import Image

# Open the image
im = Image.open('image.png') 

# Quantize down to 2 colour palettised image using *"Fast Octree"* method:
q = im.quantize(colors=2,method=2)

# Now look at the first 2 colours, each 3 RGB entries in the palette:
print(q.getpalette()[:6])
样本结果

[0, 0, 255, 247, 0, 255]
如果将其写成2个RGB三元组,则会得到:

RGB 0/0/255   = blue
RGB 247/0/255 = magenta
对大量图像执行此操作的最佳方法是使用多线程或多处理,如果您希望快速完成这些操作


关键词:Python、PIL、枕头、图像、图像处理、八叉树、快速八叉树、量化、量化、调色板、调色板、调色板、调色板、调色板、调色板、减少颜色、消除混叠、字体、唯一、唯一颜色、唯一颜色。

图像存储的文件格式是什么?你能分享一些图片,或者链接到它们吗?我会在图片出现时处理它们,它们可以是png或jpg。它可以是一些文本的屏幕截图,在一个字母上有左上角和右下角的坐标。然后在单个字母的坐标上运行我的算法,我会得到一个2元组的列表,代表背景和文本的颜色。如果你的图像是文本,通常是抗锯齿的,或者是JPEG格式的,几乎可以肯定它们实际上不会只包含2种独特的颜色。您可能需要进行颜色量化,或进行k-均值聚类以获得合理的值。试着看看你在字母边缘放大了很多的图片,看看我的意思。看看我的答案,开始吧。。。令人惊叹的有没有一种方法可以自动将Python中的RGB值注释为一组基本颜色,以便在Python中将(0,0255)标记为蓝色?