【问题标题】:Robust way to find colour name from rgb code从 rgb 代码中查找颜色名称的可靠方法
【发布时间】:2020-04-07 00:08:13
【问题描述】:

我正在尝试编写一个基于 RGB 代码的简单函数,它返回最接近“参考”颜色的名称。 基于other SO question,我将 RGB 转换为 CIE LAB 并计算输入颜色和参考颜色之间的距离。然后我正在寻找最小的距离并采用对应的颜色。
不幸的是,建议的解决方案只能部分起作用。鉴于“深橙色”颜色被解释为红色。 我尝试改进它,并根据this 文章将 deltaE_ciede76 更改为 deltaE_ciede94deltaE_ciede00

您知道他们如何在以下页面上解决此问题吗?: 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()

【问题讨论】:

  • 这不只是 RGB 坐标中的 3 空间距离问题吗?您需要导出一些适合您的问题的距离度量,例如:abs(R_i - **R**) + abs(G_i - **G**) + abs(B_i - **B**)。我假设你有一个给定的“可接受”颜色矩阵,它给你 RGB
  • 也许HSVHSL更合适?您也可以使用 kNN 方法为您执行此操作。这是一个没有任何记忆的香草分类器。
  • 你有多少参考色?有清单吗?
  • @MarkSetchell 我有 28 种颜色的列表。 pastebin.com/FkFpWLpJ
  • @jasonm RGB 这里不推荐使用:来源:stackoverflow.com/a/9019461/9854242

标签: python colors computer-vision scikit-image hsv


【解决方案1】:

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

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

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

【讨论】:

  • 太棒了!非常感谢您的回答。 :) 我也会尝试你的方法,但我仍然很好奇描述的问题是否可以通过距离计算来解决。
猜你喜欢
  • 2015-05-09
  • 2011-01-28
  • 2014-12-12
  • 2017-05-03
  • 2018-12-23
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多