OpenCV InRange参数

时间:2018-02-08 16:03:40

标签: android opencv

我在Android上使用OpenCV实时查找特定颜色的圆圈。我的第一步是只保留与我正在寻找的定义颜色相对应的像素(本例中为红色或绿色)。 Example Image.

为此我正在使用方法 inRange()

这是我的问题:需要什么样的颜色模型(RGB,BGR,HSV,..)作为下限/上限颜色参数?并且:在自然亮度变化方面定义这些颜色边界的好习惯是什么?

matRgba = inputFrame.rgba();

Scalar lowerColorBound = Scalar(0.0, 0.0, 0.0); // Blue, Green, Red?
Scalar upperColorBound = Scalar(0.0, 0.0, 0.0);

// convert to HSV, necessary to use inRange()
Imgproc.cvtColor(matRgba, matRgba, Imgproc.COLOR_RGB2HSV);

// keep only the pixels defined by lower and upper bound range
Core.inRange(matRgba, lowerColorBound, upperColorBound, matRgba);

1 个答案:

答案 0 :(得分:2)

OpenCV中inRange(src, lowerb, upperb, dst)函数所需的颜色模型是HSV。

lowerbupperb参数以HSV格式指定所需的上下色界限。在OpenCV中,对于HSV,色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。

对于对象跟踪应用程序,一种可能的做法(如official documentation中所建议的)可以定义以下两个颜色范围:

  1. 从一种颜色开始以RGB格式进行跟踪。
  2. 将颜色转换为HSV格式。让(H, S, V)为它的值。
  3. 将值(H - deltaH, minS, minV)分配给lowerb,将值(H - deltaH, maxS, maxV)分配给upperb

在步骤3中定义的参数的可能起始值可以是:

  • deltaH = 10
  • minS = 100minV = 100
  • maxS = 255maxV = 255

然后,您可以根据需要调整它们以缩小或扩大H,S,V间隔。