【发布时间】:2020-04-07 00:08:13
【问题描述】:
我正在尝试编写一个基于 RGB 代码的简单函数,它返回最接近“参考”颜色的名称。
基于other SO question,我将 RGB 转换为 CIE LAB 并计算输入颜色和参考颜色之间的距离。然后我正在寻找最小的距离并采用对应的颜色。
不幸的是,建议的解决方案只能部分起作用。鉴于“深橙色”颜色被解释为红色。
我尝试改进它,并根据this 文章将 deltaE_ciede76 更改为 deltaE_ciede94 和 deltaE_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**)。我假设你有一个给定的“可接受”颜色矩阵,它给你 R、G 和 B。 -
也许
HSV或HSL更合适?您也可以使用 kNN 方法为您执行此操作。这是一个没有任何记忆的香草分类器。 -
你有多少参考色?有清单吗?
-
@MarkSetchell 我有 28 种颜色的列表。 pastebin.com/FkFpWLpJ
-
@jasonm RGB 这里不推荐使用:来源:stackoverflow.com/a/9019461/9854242
标签: python colors computer-vision scikit-image hsv