opencv颜色识别-红色

前言

在进行opencv的颜色处理的时候,发现HSV通道进行阈值化的效果优于BGR通道,因此采用了HSV通道进行阈值划分,但是在识别红色时发现了一个问题,在opnecv中,HSV通道被划分为以下范围

H -0-180)
S -0-255)
V -0-255

在进行红色的识别时,发现怎么搞色块中都存在部分空缺,也就是无法识别的红色,如下图
在这里插入图片描述

于是上网查询了HSV的具体颜色划分,见下表

在这里插入图片描述

由此得知,在HSV通道中,红色的色调(H)存在着两个范围,因此使用单一的阈值化无法正确的将红色进行分离出来。

解决方法

通过对两个阈值的二值化发现,两个范围的红色识别二值化图像刚好是互补的,于是想到使用像素操作,将两个图像进行相加,使两者白色部分融合,黑色部分保留。效果如下图
在这里插入图片描述
代码如下

Mat image_Processing(Mat imgOriginal)
{
	Mat imgHSV, imgBGR;
	Mat imgThresholded;
	imshow("chushi", imgOriginal);
	GaussianBlur(imgOriginal, imgOriginal, Size(7, 7), 0, 0);
	imshow("gaosi", imgOriginal);
	vector<Mat> hsvSplit;   //创建向量容器,存放HSV的三通道数据
	cvtColor(imgOriginal, imgHSV, COLOR_BGR2HSV); //Convert the captured frame from BGR to HSV
	split(imgHSV, hsvSplit);			//分类原图像的HSV三通道
	equalizeHist(hsvSplit[2], hsvSplit[2]);    //对HSV的亮度通道进行直方图均衡
	merge(hsvSplit, imgHSV);				   //合并三种通道
	Mat ce1;
	Mat ce2;
	Mat ce3;
	inRange(imgHSV, Scalar(156, 43, 46), Scalar(180, 255, 255), imgThresholded); //红色
	inRange(imgHSV, Scalar(156, 43, 46), Scalar(180, 255, 255), ce1); //红色
	inRange(imgHSV, Scalar(0, 43, 46), Scalar(3, 255, 255), ce2); //红色
	add(ce1,ce2,ce3,Mat());
	imshow("0-10", ce1);
	imshow("156-180",ce2);
	imshow("add后", ce3);
}

结束

至此,问题解决。
你永远不知道别人有多努力,因此请别停下来 --致彭某

在这里插入图片描述

  • 10
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值