Opencv暑期历程--Day6(根据车牌检测程序讲解“轮廓查找,形状查找,感兴趣区域(roi),绘制图形,增强对比度,锐化图片”)

本文介绍了一种使用Opencv进行车牌检测的方法,包括提高对比度、锐化图像、轮廓查找、形状检测和ROI划定等步骤。通过调整图像特性,找到可能的车牌区域,并利用SVM进行最终的识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次我打算把轮廓查找,形状查找,感兴趣区域(roi),绘制图形,增强对比度,锐化图片,imwirte都一并讲了。因为之前老师叫我做了一个检测车牌的小程序,刚好我自己设计的算法里都需要这些,那就讲到这些东西的时候我再拓展开来讲了,这个可能一下子没办法总结完,不急,慢慢来。

我先讲一下我的算法:

我的思路很简单,就是能够说从图像中找到一些符合车牌大小颜色的矩形区域,因为车牌是矩形的嘛,然后最后根据SVM去判断是不是车牌,如果是的话,就把这些roi用绿框框起来。那么接下来我是如何实现车牌区域的查找呢。

直接根据彩色图像来查找绝对是不行的啦。因为担心老师给的图像会有些暗,可能一张图片中车牌区域的颜色就没有那么明显了,所以我们第一步要先提高对比度。

对比度亮度提高:

可以看到,左边是经过提高对比度后 ,车牌区域的颜色和周围颜色的区别就更加的大了,这样的好处是让车牌变得更白,要来判断roi的HSV白色颜色概率的时候能够更加精准。

void raise(Mat & src)//提高亮度以及对比度
{
	Mat  dest;
	

	namedWindow("src", CV_WINDOW_AUTOSIZE);
	imshow("src", src);

	dest = Mat::zeros(src.size(), src.type());
	int width = src.cols;
	int height = src.rows;
	int channels = src.channels();

	float alphe = 1.1; //(alphe > 1)
	int beta = -30;// 负数对比度越高
	Mat m1;
	src.convertTo(m1, CV_32F); //将原始图片数据(CV_8U类型)转换成CV_32类型,以提高操作的精度
	for (int row = 0; row < height; row++) {
		for (int col = 0; col < width; col++) {
			if (channels == 3) { //对于3通道
				float b = m1.at<Vec3f>(row, col)[0];
				float g = m1.at<Vec3f>(row, col)[1];
				float r = m1.at<Vec3f>(row, col)[2];

				dest.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alphe * b + beta);
				dest.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alphe * g + beta);
				dest.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alphe * r + beta);
			}
			else if (channels == 1) { //对于单通道
				int pix = src.at<uchar>(row, col);
				dest.at<uchar>(row, col) = saturate_cast<uchar>(alphe * pix + beta);
			}
		}
	}
	dest.copyTo(src);
	/*namedWindow("change");
	imshow("change", src);
	waitK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值