gpt4 book ai didi

c++ - OpenCV更好地检测红色?

转载 作者:行者123 更新时间:2023-12-02 17:58:51 25 4
gpt4 key购买 nike

我有以下图像:

enter image description here

我想使用cv::inRange方法和HSV颜色空间来检测红色矩形。

int H_MIN = 0;
int H_MAX = 10;
int S_MIN = 70;
int S_MAX = 255;
int V_MIN = 50;
int V_MAX = 255;

cv::cvtColor( input, imageHSV, cv::COLOR_BGR2HSV );

cv::inRange( imageHSV, cv::Scalar( H_MIN, S_MIN, V_MIN ), cv::Scalar( H_MAX, S_MAX, V_MAX ), imgThreshold0 );

我已经创建了动态跟踪栏以更改HSV的值,但无法获得理想的结果。

有建议使用最佳值(或过滤器)的建议吗?

最佳答案

在HSV空间中,红色环绕180。因此,您需要将H值都设置为[0,10]和[170,180]。

试试这个:

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
Mat3b bgr = imread("path_to_image");

Mat3b hsv;
cvtColor(bgr, hsv, COLOR_BGR2HSV);

Mat1b mask1, mask2;
inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

Mat1b mask = mask1 | mask2;

imshow("Mask", mask);
waitKey();

return 0;
}

您先前的结果:

enter image description here

结果添加范围[170,180]:

enter image description here

另一个仅需要检查单个范围的有趣方法是:
  • 反转BGR图像
  • 转换为HSV
  • 寻找青色

  • 这个想法已经由 fmw42提出,并由 Mark Setchell指出。非常感谢你。
    #include <opencv2\opencv.hpp>
    using namespace cv;

    int main()
    {
    Mat3b bgr = imread("path_to_image");

    Mat3b bgr_inv = ~bgr;
    Mat3b hsv_inv;
    cvtColor(bgr_inv, hsv_inv, COLOR_BGR2HSV);

    Mat1b mask;
    inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask); // Cyan is 90

    imshow("Mask", mask);
    waitKey();

    return 0;
    }

    enter image description here

    关于c++ - OpenCV更好地检测红色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064710/

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