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

时间:2018-03-10 13:00:59

标签: python python-3.x python-imaging-library

我有示例图片:https://imgur.com/a/7p3p5

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

使用PIL:

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))... so #ffffff,#feffff,#fffffff ...显然错误的答案......

使用ColorThief

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/将获得完美答案...)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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中的正确颜色,按最常用的

分类