python从一组颜色中找出与给定颜色最接近的颜色

2022-05-03 00:00:00 给定 颜色 最接近

这段代码非常有用,可以找到指定颜色相似的颜色,比如有一组8个颜色,现在给定一个rgb格式的演示,找出它与8个颜色中的哪一个最接近,如果你需要做一个按照图片颜色搜索图片的程序,这个就非常有用了。

"""
皮蛋编程(https://www.pidancode.com)
创建日期:2022/3/31
功能描述:python从一组颜色中找出与给定颜色最接近的颜色
"""
from colorsys import rgb_to_hsv

colors = dict((
    ((196, 2, 51), "RED"),
    ((255, 165, 0), "ORANGE"),
    ((255, 205, 0), "YELLOW"),
    ((0, 128, 0), "GREEN"),
    ((0, 0, 255), "BLUE"),
    ((127, 0, 255), "VIOLET"),
    ((0, 0, 0), "BLACK"),
    ((255, 255, 255), "WHITE"),))


def to_hsv(color):
    """ converts color tuples to floats and then to hsv """
    return rgb_to_hsv(*[x / 255.0 for x in color])  # rgb_to_hsv wants floats!


def color_dist(c1, c2):
    """ returns the squared euklidian distance between two color vectors in hsv space """
    return sum((a - b) ** 2 for a, b in zip(to_hsv(c1), to_hsv(c2)))


def min_color_diff(color_to_match, colors):
    """ returns the `(distance, color_name)` with the minimal distance to `colors`"""
    return min(  # overal best is the best match to any color:
        (color_dist(color_to_match, test), colors[test])  # (distance to `test` color, color name)
        for test in colors)


color_to_match = (255, 255, 0)
print(min_color_diff(color_to_match, colors))

输出结果:
(0.0010679653124866502, 'YELLOW')

相关文章