我有示例图片: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
之后,您可以根据映射值进行排序,或循环以获取最大值。