OpenCv —— 检测车牌号(附完整源码)

效果

OpenCv —— 检测车牌号(附完整源码)_第1张图片

源码

#include 
#include 

#include 

bool compareContourAreas(std::vector<cv::Point> contour1, std::vector<cv::Point> contour2)
{
	double i = fabs(cv::contourArea(cv::Mat(contour1)));
	double j = fabs(cv::contourArea(cv::Mat(contour2)));
	return (i > j);
}

int main()
{
	// 读取图像
	cv::Mat srcMat = cv::imread("cp4.png");
	if (srcMat.empty()) { return -1; }
	cv::imshow("srcMat", srcMat);

	// 图像灰化
	cv::Mat grayMat;
	cv::cvtColor(srcMat, grayMat, cv::COLOR_BGR2GRAY);

	// 双边滤波
	cv::Mat bilateralFilterMat;
	cv::bilateralFilter(grayMat, bilateralFilterMat, 13, 15, 15);

	// canny算子二值化
	cv::Mat cannyMat;
	cv::Canny(bilateralFilterMat, cannyMat, 30, 200);
	//cv::imshow("cannyMat", cannyMat);

	// 查找轮廓
	std::vector<std::vector<cv::Point>> contours;
	cv::findContours(cannyMat, contours, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);

	// 轮廓尺寸由大到小排序,然后保留前10个轮廓
	std::sort(contours.begin(), contours.end(), compareContourAreas);
	if(contours.size() > 5)
		contours.resize(5);

	// 检查其具有四个侧面和闭合图形的矩形轮廓,检测到后存储起来
	std::vector<std::vector<cv::Point>> contours4;
	std::pair<cv::Point, cv::Point> cPoint;
	for (unsigned short index = 0; index < contours.size(); ++index)
	{
		double peri = cv::arcLength(contours[index], true);

		std::vector<cv::Point> approx;
		cv::approxPolyDP(contours[index], approx, 0.018 * peri, true);

		if (approx.size() == 4)
		{
			contours4.push_back(contours[index]);

			/*approx 为每个矩形的四个角点*/
			//cv::line(srcMat, approx[0], approx[1], cv::Scalar(0, 0, 255), 2);
			//cv::line(srcMat, approx[1], approx[2], cv::Scalar(0, 0, 255), 2);
			//cv::line(srcMat, approx[2], approx[3], cv::Scalar(0, 0, 255), 2);
			//cv::line(srcMat, approx[3], approx[0], cv::Scalar(0, 0, 255), 2);

			//cv::rectangle(srcMat, approx[0], approx[2], cv::Scalar(0, 0, 255), 2);

			cPoint.first = approx[0];
			cPoint.second = approx[2];

			//break;
		}
	}

	if (contours4.size() <= 0) { return -1; }

	// 在原图绘制轮廓
	cv::drawContours(srcMat, contours4, -1, cv::Scalar(0, 0, 255), 2);

	cv::imshow("dstMat", srcMat);
	cv::waitKey(0);

	system("pause");
	return 0;
}

源码工程下载

     完整源码

关注

笔者 - jxd

微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

在这里插入图片描述

你可能感兴趣的:(OpenCv,opencv,车牌)