OpenCV Android 绿色检测
OpenCV Android Green Color Detection
目前我正在制作一个用户可以检测绿色的应用程序。我使用这张照片进行测试:
我的问题是我无法检测到任何绿色像素。在我使用蓝色之前,一切正常。现在我无法检测到任何东西,尽管我尝试了 RGB
的不同组合。我想知道它是绿色问题还是我的检测范围有问题,所以我使用 (0, 255, 0)
在绘画中制作了一个图像并且它起作用了。为什么它看不到这个圈子呢?我使用此代码进行检测:
Core.inRange(hsv_image, new Scalar([I change this value]), new Scalar(60, 255, 255), ultimate_blue);
可能是我设置了错误的范围,但我使用 Photoshop 获取其中一个绿色像素的颜色并将其 RGB
值转换为 HSV
。然而它不起作用。它甚至没有检测到我采样的像素。怎么了?提前致谢。
使用 Miki 的回答:
绿色是 HSV space H = 120 并且在 [0, 360] 范围内。
OpenCV 将 H 值减半以适应 [0,255] 范围,因此 H 值不是在 [0, 360] 范围内,而是在 [0, 180] 范围内。
S 和 V 仍在 [0, 255] 范围内。
因此,绿色的 H 值为 60 = 120 / 2。
你的上限和下限应该是:
// sensitivity is a int, typically set to 15 - 20
[60 - sensitivity, 100, 100]
[60 + sensitivity, 255, 255]
更新
由于您的图像很暗,您需要为 V 使用下限。使用这些值:
sensitivity = 15;
[60 - sensitivity, 100, 50] // lower bound
[60 + sensitivity, 255, 255] // upper bound
生成的掩码如下:
详情可参考
目前我正在制作一个用户可以检测绿色的应用程序。我使用这张照片进行测试:
我的问题是我无法检测到任何绿色像素。在我使用蓝色之前,一切正常。现在我无法检测到任何东西,尽管我尝试了 RGB
的不同组合。我想知道它是绿色问题还是我的检测范围有问题,所以我使用 (0, 255, 0)
在绘画中制作了一个图像并且它起作用了。为什么它看不到这个圈子呢?我使用此代码进行检测:
Core.inRange(hsv_image, new Scalar([I change this value]), new Scalar(60, 255, 255), ultimate_blue);
可能是我设置了错误的范围,但我使用 Photoshop 获取其中一个绿色像素的颜色并将其 RGB
值转换为 HSV
。然而它不起作用。它甚至没有检测到我采样的像素。怎么了?提前致谢。
使用 Miki 的回答:
绿色是 HSV space H = 120 并且在 [0, 360] 范围内。
OpenCV 将 H 值减半以适应 [0,255] 范围,因此 H 值不是在 [0, 360] 范围内,而是在 [0, 180] 范围内。 S 和 V 仍在 [0, 255] 范围内。
因此,绿色的 H 值为 60 = 120 / 2。
你的上限和下限应该是:
// sensitivity is a int, typically set to 15 - 20
[60 - sensitivity, 100, 100]
[60 + sensitivity, 255, 255]
更新
由于您的图像很暗,您需要为 V 使用下限。使用这些值:
sensitivity = 15;
[60 - sensitivity, 100, 50] // lower bound
[60 + sensitivity, 255, 255] // upper bound
生成的掩码如下:
详情可参考