我有一台输出为RGB的相机。 将RGB值转换为“绿色”(例如)或任何其他颜色的首选方法是什么? 当然不是说0,255,0,而是更微妙的价值
答案 0 :(得分:1)
这是您可以考虑的一维算法。首先确定您希望在域上拥有多少个颜色名称。例如,如果我们只看红色,您可能有四种颜色:
[bright red, red, burgundy, black]
这些颜色将出现在以下红色值:
[255, 170, 85, 0]
现在,当您的程序遇到具有随机红色值的点时,您可以选择与其最匹配的颜色名称。例如,红色值200最接近170,即红色,因此您将颜色报告为红色。
这种方法可以通过一点点工作扩展到RGB的三个维度。
答案 1 :(得分:0)
如果您想根据人类对其进行分类来分配颜色,那么您需要保留 RGB 空间并移动到例如 HSL 或 HSV
当在those spaces H (色调)时,人类通常会使用" color" (比如"绿色")。
获得H的一种简单方法是从所有三个中减去R,G和B的最小值,并将剩余的最大值除以1.然后你有6个案例(6"切片"色轮)取决于哪个组件为0,哪个为1,哪个是中间组件。在Python中
def H(r, g, b):
# Remove min (this maximizes saturation)
minv = min(r, g, b)
r -= minv
g -= minv
b -= minv
# Scale max to 1 (this normalizes brightness)
maxv = max(r, g, b)
if maxv == 0:
return None # H for pure black is undefined
k = 60.0 / maxv
r = int(r * k + 0.5)
g = int(g * k + 0.5)
b = int(b * k + 0.5)
# Compute result
if r == 60:
return (g - b) % 360
elif g == 60:
return 120 + b - r
else:
return 240 + r - g
答案 2 :(得分:0)
您需要使用某种列表将RGB值映射到颜色名称。
我建议你在软件中加入类似内容: https://en.wikipedia.org/wiki/List_of_colors:_A%E2%80%93F
然后使用您拥有的RGB值从该表中获得最佳匹配。
请注意照明和白平衡的重要性。精确的颜色识别很难实现。