gpt4 book ai didi

Android OpenCV 颜色检测

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:37 24 4
gpt4 key购买 nike

目前我正在开发一款可以检测彩色圆圈的应用程序。我正在尝试通过关注 this 来做到这一点教程,其中有人使用 Python 检测图像上的红色圆圈。我已经为 Java 编写了相同的代码。

                    Mat mat = new Mat(bitmap.getWidth(), bitmap.getHeight(),
CvType.CV_8UC3);

Mat hsv_image = new Mat();
Utils.bitmapToMat(bitmap, mat);
Imgproc.cvtColor(mat, hsv_image, Imgproc.COLOR_BGR2HSV);

Mat lower_red_hue_range = new Mat();
Mat upper_red_hue_range = new Mat();

Core.inRange(hsv_image, new Scalar(0, 100, 100), new Scalar(10, 255, 255), lower_red_hue_range);
Core.inRange(hsv_image, new Scalar(160, 100, 100), new Scalar(179, 255, 255), upper_red_hue_range);
Utils.matToBitmap(hsv_image, bitmap);
mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
image.setImageBitmap(mutableBitmap);

我使用的图像与教程中的图像相同: enter image description here

这是应用了 BGR2HSV 的图像: enter image description here

当我使用较低的红色色调范围执行代码时,它会检测到蓝色圆圈。当我使用较高的红色色调范围时,它会给我黑色 bmp(未检测到任何东西)。怎么可能?我究竟做错了什么?这实际上是从 python 到 Java 的复制。那为什么结果不一样呢?提前致谢。

最佳答案

您的 matCvType.CV_8UC1 图像,即您正在处理灰度图像。尝试使用 CvType.CV_8UC3

Mat mat = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC3);

hsv_image 应该是这样的:

enter image description here

如何选择自定义范围:


您可能想要检测一个绿色 圆圈。那么,在 HSV 中,通常范围是:

H in [0,360]
S,V in [0,100]

但是,对于 CV_8UC3 图像,每个分量 H、S、V 最多只能由 256 个值表示,因为它存储在 1 个字节中。因此,在 OpenCV 中,CV_8UC3 的范围 H、S、V 是:

H in [0,180] <- halved to fit in the range
S,V in [0,255] <- stretched to fit the range

因此,要从典型范围切换到 OpenCV 范围,您需要:

opencv_H = typical_H / 2;
opencv_S = typical_S * 2.55;
opencv_V = typical_V * 2.55;

因此,绿色的色相值在 120 左右。色相的值可以在 [0,360] 区间内。但是,对于 Mat3b HSV 图像,H 的范围在 [0,180] 内,即减半,因此它可以适合最多 256 个可能值的 8 位表示。所以,你希望 H 值在 120/2 = 60 左右,比如从 50 到 70。您还将 S,V 的最小值设置为 100,以防止出现非常暗(几乎是黑色)的颜色。

Mat green_hue_range
inRange(hsv_image, cv::Scalar(50, 100, 100), cv::Scalar(70, 255, 255), green_hue_range);

关于Android OpenCV 颜色检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com