如何从图像中提取最常用的颜色?( ColorThief / PIL 返回了错误的值)



我有示例图片:https://i.stack.imgur.com/8KXRg.jpg

最常用的颜色是:到目前为止 #f6f6f6(98%(

使用太平船务:

from PIL import Image
img = Image.open(000777.sk.jpg)
width, height = img.size
convert_rgb = img.convert('RGB')
colors = img.getcolors(width * height)

这将返回为最常用的颜色:(389267, (255, 255, 255)), (346, (254, 255, 255)), (281, (252, 255, 255))...所以 #ffffff,#feffff,#fcffff...显然错误的答案...

使用颜色小偷

from colorthief import ColorThief
color_thief = ColorThief('000777.sk.jpg')
palette = color_thief.get_palette(color_count=10)
这将返回 (243, 243, 243(, (52, 50, 50(, (239, 131, 52(, (148,

148, 148(, (241, 114, 24(, (210, 163, 133(]...这是 #f3f3f3,#343232,#ef8334

又不是正确答案...

这是怎么回事? 在线颜色标识符可以得到正确的答案(就像 https://labs.tineye.com/color/会得到完美的答案......

有什么想法吗?

终于想通了...这对我有用:

def get_colors(pic):
    color_str = []
    img = Image.open(pic)
    width, height = img.size
    quantized = img.quantize(colors=10, kmeans=3)
    convert_rgb = quantized.convert('RGB')
    colors = convert_rgb.getcolors()  
    color_str = sorted(colors, reverse=True)
    final_list = []
    for i in color_str:
        final_list.append(i[1])
    return final

这将返回 RGB 中的正确颜色,按最常用到最少排序

您可以遍历每个像素,将像素颜色添加到哈希图(字典(中(如果尚未包含(,或者如果包含,则增加计数器。

color = some_color;
if color in my_map
    my_map["color"] = my_map["color"]+1
else
    my_map["color"] = 1

之后,您可以根据映射值进行排序,或循环以获取最大值。

最新更新