按颜色分类?

2024-09-30 22:12:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户列表。在此列表中,每个用户表示为具有某些属性的对象。其中一个属性是颜色。所以,每个用户都有一些颜色。例如,一个用户的颜色是#f5abb5,第二个用户的颜色是#f5abbb。它们都是粉红色的。在

我需要根据用户选择的颜色对他们进行分类。这些颜色存储为十六进制代码。所以,我认为Python有一些工具可以帮助理解颜色,并说#f5abb5和{}是粉红色?我找到了colour库,但是没有办法理解我需要的颜色。在

另一种方法(不是很好)在RGB颜色空间中,hex#f5abb5由96.1%的红色、67.1%的绿色和71%的蓝色组成。这意味着红色在这里是主要的,我可以这样划分用户。但是第一种理解这两种颜色都是粉红色(或者其他颜色是天蓝色等等)的方法要好得多。在


Tags: 工具对象方法代码用户列表属性颜色
1条回答
网友
1楼 · 发布于 2024-09-30 22:12:52

看看webcolors。在

有一个函数^{}完全满足您的需要。在

>>> hex_to_name(u'#ffffff')
u'white'
>>> hex_to_name(u'#fff')
u'white'
>>> hex_to_name(u'#000080')
u'navy'
>>> hex_to_name(u'#daa520')
u'goldenrod'

编辑:

注意那些不匹配的颜色。在

import webcolors as wc
import numpy as np

def get_approx_color(hex_color):
    orig = wc.hex_to_rgb(hex_color)
    similarity = {}
    for hex_code, color_name in wc.css3_hex_to_names.items():
        approx = wc.hex_to_rgb(hex_code)
        similarity[color_name] = sum(np.subtract(orig, approx) ** 2)
    return min(similarity, key=similarity.get)

def get_color_name(hex_color):
    try:
        return wc.hex_to_name(hex_color)
    except ValueError:
        return get_approx_color(hex_color)

print(get_color_name(u"#F5ABB5"))
# lightpink

相关问题 更多 >