我在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);
答案 0 :(得分:2)
OpenCV中inRange(src, lowerb, upperb, dst)
函数所需的颜色模型是HSV。
lowerb
和upperb
参数以HSV格式指定所需的上下色界限。在OpenCV中,对于HSV,色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。
对于对象跟踪应用程序,一种可能的做法(如official documentation中所建议的)可以定义以下两个颜色范围:
(H, S, V)
为它的值。(H - deltaH, minS, minV)
分配给lowerb
,将值(H - deltaH, maxS, maxV)
分配给upperb
。在步骤3中定义的参数的可能起始值可以是:
deltaH = 10
minS = 100
,minV = 100
maxS = 255
,maxV = 255
然后,您可以根据需要调整它们以缩小或扩大H,S,V间隔。