我有以下图像,使用某些OpenCV函数进行预处理:
现在我试图获得每种颜色的砖块数量(在这种情况下,每种颜色为1)。这些都是我的颜色。
我的计划是遍历所有颜色,使用OpenCV功能" inRange"并获得面积大小。我的问题是识别不同的颜色。我尝试了红色,并努力寻找一个好的范围。在询问谷歌之后我明白了,我必须使用HSV颜色,以获得色调值的良好范围。
所以我写了这段代码(出于某种原因用Java):
Mat img; //img is given from previos code
Mat hsv = img.clone();
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2HSV);
在此之后,我希望有一个图像,我可以用它获得不同的颜色。事实上我得到了这个:
在这张图片中,颜色几乎被破坏了......红色和浅绿色看起来一样,其他颜色也完全不同。
现在我的问题: 我有什么不对吗?是否有可能区分乐高砖的颜色?我能做些什么来实现这个目标?我正在使用OpenCV 3.1.0 for Java。
非常感谢, 丹尼斯
答案 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()。
由于