0

我想从网络摄像头检测红色和绿色物体。我正在使用这个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 >= 100red -green >= 60将是purple.

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

4

2 回答 2

1

如果您查看颜色 RGB(120,60,210),它是这个紫色:

在此处输入图像描述

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

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

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

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

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

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

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

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

于 2015-11-26T11:23:54.603 回答
0

RGB 颜色解析器。 这就是你需要的。当然,它也可以用于颜色验证。

从描述:

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

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

演示:演示

于 2021-01-27T06:34:10.597 回答