如何从 RGB 中获取真实颜色

How to get true color from RGB

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

这是一个你可以考虑的一维算法。首先决定您希望在域中拥有多少个颜色名称。例如,如果我们只看红色,则可能有四种颜色:

[bright red, red, burgundy, black]

这些颜色将出现在以下红色值处:

[255, 170, 85, 0]

现在,当您的程序遇到一个具有随机红色值的点时,您可以选择最接近它的颜色名称。例如,红色值 200 最接近 170,即红色,因此您会将颜色报告为红色。

这种方法可以通过一些工作扩展到 RGB 的三个维度。

如果你想根据人类如何分类颜色来分配颜色,那么你需要离开 RGB space 并移动到例如 HSLHSV.

When in those spaces H(色调)是人类通常对 "color"(如 "green")的意思。

获得 H 的一个简单方法是从所有三个中减去 R、G 和 B 中的最小值,并将剩余的最大值缩放为 1。然后你有 6 种情况(颜色的 6 "slices"轮)取决于哪个组件达到 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

您需要使用某种列表将 RGB 值映射到颜色名称。

我建议你在你的软件中加入类似的东西: https://en.wikipedia.org/wiki/List_of_colors:_A%E2%80%93F

然后使用您必须从中获得最佳匹配的 RGB 值。

请注意照明和白平衡的重要性。准确的颜色识别是很难做到的。