【问题标题】:Detect a colour based on its RGB根据 RGB 检测颜色
【发布时间】:2016-02-29 09:31:33
【问题描述】:

我想检测来自网络摄像头的红色和绿色物体。我正在使用这个Trackingjs 库。我认为使用该库,它将跟踪对象的红色、绿色和蓝色值,并根据代码中内置的颜色库检测颜色。

它们的内置颜色定义如下:

  tracking.ColorTracker.registerColor('purple', function(r, g, b) {
    var dx = r - 120;
    var dy = g - 60;
    var dz = b - 210;
    if ((b - g) >= 100 && (r - g) >= 60) {
      return true;
    }
    return dx * dx + dy * dy + dz * dz < 3500;
  });

在上面的示例中,具有blue - green &gt;= 100red -green &gt;= 60 的对象将是purple

有人可以向我解释一下这是如何工作的。 如果我想检测红色/红色和绿色/绿色,我应该如何使用相同的功能。

【问题讨论】:

    标签: colors computer-vision rgb tracking.js


    【解决方案1】:

    如果你看一下颜色 RGB(120,60,210),它就是这个紫色:

    现在,dx 测量传入的颜色与该紫色中的红色分量的距离,dy 测量传入的颜色与该紫色的绿色分量的距离,dz 测量传入的颜色与蓝色分量的距离。

    最后的返回值,使用3-D毕达哥拉斯计算传入的颜色与3-D颜色立方体中的紫色距离的平方,黑色在一个角,白色对角线和R, G和B在拐角处。因此,它有效地在紫色周围定义了一个“球体”

    如果你想检测偏红的色调,你会想要类似的东西

    if ((r-g)>50 && (r-b)>50) { return true;}
    

    这只是说您希望红色多于绿色,红色多于蓝色。

    如果你想检测绿色调,你会想要类似的东西

    if ((g-r)>50 && (g-b)>50) { return true;}
    

    这只是说你希望绿色多于红色,绿色多于蓝色。

    【讨论】:

    • 这是非常好的知识。红色工作正常,但与绿色。我想检测的绿色来自黄瓜,它是深绿色的。当我尝试绿色代码时,它检测到更多的浅绿色,因为它只检测到黄瓜上有光反射的部分。你有什么建议吗?我目前的绿色代码是:if ((g-r) &gt;= 50 &amp;&amp; (g-b)&gt;=10) { return true; }
    • 根据您使用的操作系统,您可以使用“数字色度计”程序来检查您尝试检测的 RGB 值,然后设计一个检测它的公式...innolea.com/easily-detect-rgb-and-html-hex-code-of-colors/2308 或者也许你只需要&amp;&amp; g &lt; 64 就可以找到深绿色。或者您可能需要转换为 HSL 颜色空间并寻找 0.3 左右的色调。
    【解决方案2】:

    RGB Colour Parser. 这就是你需要的。当然也可以用于颜色验证。

    来自描述:

    一个接受字符串并尝试从中找出有效颜色的 JavaScript 类。一些接受的输入例如:

    rgb(0, 23, 255)
    #336699
    ffee66
    fb0
    red
    darkblue
    cadet blue
    

    演示:Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2020-03-02
      • 1970-01-01
      • 2020-04-04
      • 2017-11-11
      相关资源
      最近更新 更多