如何从RGB获得真彩色

时间:2016-09-25 06:14:16

标签: machine-learning computer-vision

我有一台输出为RGB的相机。 将RGB值转换为“绿色”(例如)或任何其他颜色的首选方法是什么? 当然不是说0,255,0,而是更微妙的价值

3 个答案:

答案 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值从该表中获得最佳匹配。

请注意照明和白平衡的重要性。精确的颜色识别很难实现。