为了账号安全,请及时绑定邮箱和手机立即绑定

OpenCV更好地检测红色?

OpenCV更好地检测红色?

C++
智慧大石 2019-10-21 10:21:41
我有以下图像:我想使用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的值,但无法获得理想的结果。有建议使用最佳值(或过滤器)的建议吗?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

在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;

}

您先前的结果:

//img1.sycdn.imooc.com//5dad168d00013aad05230149.jpg

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

//img1.sycdn.imooc.com//5dad16940001158c05230149.jpg

另一个仅需要检查单个范围的有趣方法是:


反转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;

}

//img1.sycdn.imooc.com//5dad169d00014b2605230149.jpg

查看完整回答
反对 回复 2019-10-21
  • 1 回答
  • 0 关注
  • 420 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信