在OpenCV(Java)中获得正确的HSV颜色inRange

时间:2016-06-01 13:28:23

标签: java opencv colors hsv

我有以下图像,使用某些OpenCV函数进行预处理:

Different colored lego bricks

现在我试图获得每种颜色的砖块数量(在这种情况下,每种颜色为1)。这些都是我的颜色。

我的计划是遍历所有颜色,使用OpenCV功能" inRange"并获得面积大小。我的问题是识别不同的颜色。我尝试了红色,并努力寻找一个好的范围。在询问谷歌之后我明白了,我必须使用HSV颜色,以获得色调值的良好范围。

所以我写了这段代码(出于某种原因用Java):

Mat img; //img is given from previos code
Mat hsv = img.clone();
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV);

在此之后,我希望有一个图像,我可以用它获得不同的颜色。事实上我得到了这个:

Weird HSV image

在这张图片中,颜色几乎被破坏了......红色和浅绿色看起来一样,其他颜色也完全不同。

现在我的问题: 我有什么不对吗?是否有可能区分乐高砖的颜色?我能做些什么来实现这个目标?我正在使用OpenCV 3.1.0 for Java。

非常感谢, 丹尼斯

1 个答案:

答案 0 :(得分:2)

我发现了自己的错误,我并不以此为荣。这是一个简单的错字。通过修复这个和@Miki的帮助,我能够找到我的颜色。

我的错误:

Mat img; //img is given from previos code
Mat hsv = img.clone();
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV);    
Core.inRange(img, lowerBlue, upperBlue, hsv); //img

而不是

Mat img; //img is given from previos code
Mat hsv = img.clone();
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV);    
Core.inRange(hsv, lowerBlue, upperBlue, hsv); //hsv

事实上......我将图像转换为HSV并将RGB图片转换为inRange()。

由于