资源简介

基于opencv的车牌识别源码,亲测可用,包括提前提取车牌区域,字符分割以及字符识别整个车牌识别过程。在提取车牌区域时用过SVM支持向量机来识别,最后的车牌字符识别通过神经网络识别。将两种机器学习算法都用到了。不仅仅用于学习,我在车牌识别项目中也是基于该源码工作的。

资源截图

代码片段和文件信息

#include “ImageRecognition.h“

void ImageRecognition::setFilename(string name) {
filename = name;
}

ImageRecognition::ImageRecognition(){
showSteps = false;
saveRecognition = false;
}

bool ImageRecognition::verifySizes(RotatedRect ROI){
// 以下设置车牌默认参数,用于识别矩形区域内是否为目标车牌
float error = 0.4;
// 西班牙车牌宽高比: 520 / 110 = 4.7272
float aspect = 4.7272;
// 设定区域面积的最小/最大尺寸,不在此范围内的不被视为车牌
int min = 15 * aspect * 15;    // 15个像素
int max = 125 * aspect * 125;  // 125个像素
float rmin = aspect - aspect*error;
float rmax = aspect + aspect*error;

int area = ROI.size.height * ROI.size.width;
float r = (float)ROI.size.width / (float)ROI.size.height;
if (r<1)
r = (float)ROI.size.height / (float)ROI.size.width;

// 判断是否符合以上参数
if ((area < min || area > max) || (r < rmin || r > rmax))
return false;
else
return true;
}

// 对图像进行直方图均衡处理,调整亮度
Mat ImageRecognition::histeq(Mat ima)
{
Mat imt(ima.size() ima.type());
// 若输入图像为彩色,需要在HSV空间中做直方图均衡处理
// 再转换回RGB格式
if (ima.channels() == 3)
{
Mat hsv;
vector hsvSplit;
cvtColor(ima hsv CV_BGR2HSV);
split(hsv hsvSplit);
equalizeHist(hsvSplit[2] hsvSplit[2]);
merge(hsvSplit hsv);
cvtColor(hsv imt CV_HSV2BGR);
}
// 若输入图像为灰度图,直接做直方图均衡处理
else if (ima.channels() == 1){
equalizeHist(ima imt);
}
return imt;
}

// 图像分割函数
vector ImageRecognition::segment(Mat input)
{
vector output;

//n图像转换为灰度图
Mat grayImage;
cvtColor(input grayImage CV_BGR2GRAY);
blur(grayImage grayImage Size(5 5));  // 对图像进行滤波,去除噪声

// 通常车牌拥有显著的边缘特征,这里使用sobel算子检测边缘
Mat sobelImage;
Sobel(grayImage       // 输入图像
  sobelImage    // 输出图像
  CV_8U    //输出图像的深度
  1    // x方向上的差分阶数
  0    // y方向上的差分阶数
  3    // 扩展Sobel核的大小,必须是135或7
  1    // 计算导数值时可选的缩放因子,默认值是1
  0    // 表示在结果存入目标图之前可选的delta值,默认值为0
  BORDER_DEFAULT); // 边界模式,默认值为BORDER_DEFAULT
if (showSteps)
{
imshow(“Sobel“ sobelImage);
}

// 阈值分割得到二值图像,所采用的阈值由Otsu算法得到
Mat thresholdImage;
// 输入一幅8位图像,自动得到优化的阈值
threshold(sobelImage thresholdImage 0 255 CV_THRESH_OTSU + CV_THRESH_BINARY);
if (showSteps)
{
imshow(“Threshold Image“ thresholdImage);
}

// 形态学之闭运算
// 定义一个结构元素structuringElement,维度为17*3
Mat structuringElement = getStructuringElement(MORPH_RECT Size(17 3));
// 使用morphologyEx函数得到包含车牌的区域(但不包含车牌号)
morphologyEx(thresholdImage thresholdImage CV_MOP_CLOSE structuringElement);
if (showSteps)
{
imshow(“Close“ thresholdImage);
}

// 找到可能的车牌的轮廓
vector< vector< Point> > contours;
findContours(thresholdImage
 contours // 检测的轮廓数组,每一个轮廓用一个point类型的vector表示
     CV_RETR_EXTERNAL // 表示只检测外轮廓
 CV_CHAIN_APPROX_NONE); // 轮廓的近似办法,这里存储所有的轮廓点

// 对每个轮廓检测和提取最小区域的有界矩形区域
vector >::iterator itc = contours.begin();
vector rects;
// 若没有达到设定的宽高比要求,移去该区域
while (itc != contours.end()) 
{
RotatedRect ROI = minAreaRect(Mat(*itc));
if (!verifySizes(ROI)){
itc = contours.erase(itc);
}
else{
++itc;
rects.push_back(ROI);
}
}

// 在白色的图上画

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-06-01 14:56  亲测-车牌识别(SVM+神经网络)\
     目录           0  2017-08-29 15:44  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\
     文件    15851785  2017-05-26 20:10  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition.zip
     目录           0  2017-08-01 17:12  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\
     文件      393261  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\3154FFY.JPG
     文件      386667  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\DSC_0566.jpg
     文件      292352  2017-08-01 17:12  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\NumberPlateRecognition.exe
     文件     1362640  2017-08-01 17:12  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\NumberPlateRecognition.ilk
     文件     3951616  2017-08-01 17:12  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\NumberPlateRecognition.pdb
     文件     3392688  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\OCR.xml
     文件         684  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber0.jpg
     文件         709  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber1.jpg
     文件         521  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber2.jpg
     文件         701  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber3.jpg
     文件         613  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber4.jpg
     文件         626  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber5.jpg
     文件         633  2015-05-29 17:27  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\PlateNumber6.jpg
     文件     2561352  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\SVM.xml
     目录           0  2015-05-29 17:11  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\
     文件      196236  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\2715DTZ.jpg
     文件      293009  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\3028BYS.JPG
     文件      393261  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\3154FFY.JPG
     文件      319706  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\3266CNT.JPG
     文件      281617  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\3732FWW.JPG
     文件      373921  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\5445BSX.JPG
     文件      328567  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\7215BGN.JPG
     文件      267098  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\8995CCN.JPG
     文件      514614  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\9588DWV.jpg
     文件      356947  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\9773BNB.jpg
     文件      365670  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\DSC_0562.jpg
     文件      386667  2012-12-29 04:28  亲测-车牌识别(SVM+神经网络)\NumberPlateRecognition\Debug\test\DSC_0566.jpg
............此处省略75个文件信息

评论

共有 条评论