我想从图像中识别独特的颜色。我使用CvScalar loc = cvGet2D(img, i, j);
, 并检查我使用的位置是红色还是绿色CvScalar red = CvScalar.RED;
。但是,布尔评估永远不会返回 true,因为我的图像包含红色阴影。有没有办法修改CvScalar
它以忽略阴影,或者摆弄 loc
变量?
问问题
289 次
2 回答
0
OpenCV 以 BGR 格式存储图像,因此要获取您可以使用的绿色通道loc.val(1)
(第二个通道)的值,以及获取您可以使用的红色通道的值loc.val(2)
。这些将返回 [0, 255] 范围内的数字。然后,您可以比较红色和绿色通道像素值,以查看像素是更红还是更绿。
但是,比遍历每个像素更好(更快)的方法是:
- 使用 . 将图像分割成单独的红色和绿色通道
cvSplit
。 - 用于
cvCmp
比较红色和绿色通道,生成红色通道大于绿色通道的二值图像。
于 2013-02-11T22:26:43.177 回答
0
因为红色通道中最轻微的部分会破坏您的(二进制)问题:“它是绿色的吗?” 在这里使用某种“距离”可能会得到更好的结果。
取每个“找到”和“所需”颜色的 l2 范数,例如:
sqrt(r*r + b*b + g*g);
并对差异进行阈值处理(以确定它是否“足够接近”)可能会更好
于 2013-02-11T22:45:57.997 回答