使用python的PIL模块导入图像后,我想获得图像中的一组颜色作为rgb元组的列表。
如果我事先知道只有2种颜色并且图像将非常小,也许20x20像素,该怎么办?但是,我将在很多图像上运行此算法。遍历所有像素直到看到2种独特的颜色会更有效吗?因为我知道python中的循环非常慢。
答案 0 :(得分:2)
首先,让我们制作一张图像。我将只使用 ImageMagick 使洋红色文字变成蓝色背景:
convert -size 300x120 -background blue -fill magenta -gravity center -font AppleChancery label:"StackOverflow" PNG24:image.png
如您所见,我仅指定了两种颜色-洋红色和蓝色,但是PNG图像实际上包含200多种颜色,而JPEG图像则包含2,370种不同的颜色!
因此,如果我想获得两种主要颜色,可以这样做:
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,Pillow,图像,图像处理,八叉树,快速八叉树,量化,量化,调色板,变色,变色,减少颜色,减少颜色,抗锯齿,字体,独特,独特的颜色,独特的颜色。