从 rgb 代码中查找颜色名称的可靠方法

Robust way to find colour name from rgb code

我正在尝试编写一个简单的函数,它基于 RGB 代码返回最接近 "reference" 颜色的名称。 基于 other SO 问题,我正在将 RGB 转换为 CIE LAB 并计算输入颜色和参考颜色之间的距离。然后我正在寻找最小的距离并取相应的颜色。
不幸的是,建议的解决方案仅部分有效。鉴于 "dark orange" 颜色被解释为红色。 我试图改进它,并将 deltaE_ciede76 更改为 deltaE_ciede94deltaE_ciede00 ,基于 this 文章。

你知道他们是如何在下面的页面上解决这个问题的吗?: https://convertingcolors.com/rgb-color-247_104_8.html - 请向下滚动到部分:详细信息

上面写着:颜色可以用深橙色来形容。

你能给我什么建议吗?

简单程序:

import numpy as np
from skimage.color import rgb2lab, deltaE_ciede94

def identify_colour(rgb_colour):
    reference = {
        "red"   : [53.23,  80.11, 67.22], # https://convertingcolors.com/cielab-color-53.23_80.11_67.22.html
        "orange": [74.93,  23.94, 78.96], # https://convertingcolors.com/cielab-color-74.93_23.94_78.96.html
    }
    input_colour = rgb2lab([[rgb_colour / 255]])

    selected = None
    d = {}
    for colour, value in reference.items():
        basic_lab = np.asarray(value)
        distance = deltaE_ciede94(basic_lab, input_colour)
        d[colour] = distance

    selected = min(d, key=d.get)
    print("selected: ", selected)
    print(d)
    return selected

def main():
    rgb_colour = np.array([247, 104, 8]) # https://convertingcolors.com/rgb-color-247_104_8.html
    identify_colour(rgb_colour)

if __name__ == '__main__':
    main()

我不能发表评论,只能回答,但因为这是我的网站,所以我想在

上发表评论

"Do you have any idea how they solve this problem on the below page?: https://convertingcolors.com/rgb-color-247_104_8.html - Please scroll down to the section: Details."

看看这个演讲和幻灯片;这帮助我实现了这个功能: https://www.dotconferences.com/2018/11/david-desandro-read-color-hex-codes