Python 从rgb代码中查找颜色名称的健壮方法

Python 从rgb代码中查找颜色名称的健壮方法,python,colors,computer-vision,scikit-image,hsv,Python,Colors,Computer Vision,Scikit Image,Hsv,我试图写一个简单的函数,它基于RGB代码返回最接近的“参考”颜色的名称。 基于这个问题,我将RGB转换为CIE实验室,并计算输入颜色和参考颜色之间的距离。然后我在寻找最小的距离并选择相应的颜色。 不幸的是,建议的解决方案只能部分起作用。鉴于“深橙色”的颜色被解释为红色。 我试图改进它,并根据文章将deltaE_ciede76改为deltaE_ciede94和deltaE_ciede00 你知道下页他们是如何解决这个问题的吗 -请向下滚动至“详细信息”部分 上面写着:颜色可以描述为深饱和橙色 你能

我试图写一个简单的函数,它基于RGB代码返回最接近的“参考”颜色的名称。 基于这个问题,我将RGB转换为CIE实验室,并计算输入颜色和参考颜色之间的距离。然后我在寻找最小的距离并选择相应的颜色。
不幸的是,建议的解决方案只能部分起作用。鉴于“深橙色”的颜色被解释为红色。 我试图改进它,并根据文章将deltaE_ciede76改为deltaE_ciede94和deltaE_ciede00

你知道下页他们是如何解决这个问题的吗 -请向下滚动至“详细信息”部分

上面写着:颜色可以描述为深饱和橙色

你能给我一些建议吗

简单程序:

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()

我不能评论,只是回答,但因为这是我的网站,我想评论

“您知道他们如何在下页解决此问题吗?:-请向下滚动到“详细信息”部分。”

看看这个演讲和幻灯片;这有助于我实现此功能:

这不就是RGB坐标系下的3空间距离问题吗?您需要导出一些适合您的问题的距离度量,例如:
abs(R\u i-**R**)+abs(G\u i-**G**)+abs(B\u i-**B**)
。我假设你有一个给定的“可接受”颜色矩阵,它给出了R、G和B。也许
HSV
HSL
更合适?你们也可以使用这个方法来为你们做这件事。它像香草一样没有记忆。你有多少参考颜色?有名单吗?@MarkSetchell我有28种颜色的名单@这里不推荐使用jasonm RGB:来源:太好了!非常感谢你的回答。:)我也会尝试你的方法,但我仍然好奇,如果描述的问题可以解决距离计算。