三通道阈值化最好不要使用img_h<0.45&img_s>0.15&img_v>0.25的写法~

来源:互联网 发布:牛顿环和劈尖实验数据 编辑:程序博客网 时间:2024/06/16 09:56

这种情况下最好使用cv::inRange函数为什么?看下面的代码运行结果对比就知道了~
首先是cv::inRange函数的代码和运行结果

代码如下:

// 低阈值限定cv::inRange(hsvImage, cv::Scalar(0, 43, 46), cv::Scalar(10, 255, 255), lowTempMat);// 高阈值限定cv::inRange(hsvImage, cv::Scalar(156, 43, 46),    cv::Scalar(180, 255, 255), upperTempMat);cv::imshow("lowTempMat", lowTempMat);cv::imshow("upperTempMat", upperTempMat);// 颜色阈值限定合并cv::Mat redTempMat;cv::addWeighted(lowTempMat, 1.0, upperTempMat, 1.0, 0.0, redTempMat);cv::imshow("redTempMat", redTempMat);

运行结果:


其次是img_h<0.45&img_s>0.15&img_v>0.25写法的代码和结果:

代码如下:

// 分割hsv通道std::vector<cv::Mat> hsv_vec;cv::split(hsvImage, hsv_vec);cv::Mat img_h, img_s, img_v;img_h = hsv_vec[0];img_s = hsv_vec[1];img_v = hsv_vec[2];// 低阈值限定lowTempMat=(img_h>0&img_h<10&img_s>43&img_s<255&img_v>46&img_v<255);// 高阈值限定upperTempMat=(img_h>156&img_h<180&img_s>43&img_s<255&img_v>46&img_v<255);cv::imshow("lowTempMat", lowTempMat);cv::imshow("upperTempMat", upperTempMat);// 颜色阈值限定合并cv::Mat redTempMat;cv::addWeighted(lowTempMat, 1.0, upperTempMat, 1.0, 0.0, redTempMat);cv::imshow("redTempMat", redTempMat);cv::waitKey(0);

运行结果:


可见,lowTempMat的结果是明显不对的!

-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号2487872782

0 0
原创粉丝点击