资源简介
基于SVM与人工神经网络的车牌识别算法,使用了OpenCV的图像处理函数,在VS2013平台上实现
代码片段和文件信息
#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);
}
}
// 在白色的图上画出蓝色的轮廓
cv::Mat re
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-05-21 00:59 NumberPlateRecognition\
目录 0 2015-05-20 20:46 NumberPlateRecognition\Debug\
文件 393261 2012-12-29 04:28 NumberPlateRecognition\Debug\3154FFY.JPG
文件 514614 2012-12-29 04:28 NumberPlateRecognition\Debug\9588DWV.jpg
文件 290304 2015-05-21 00:02 NumberPlateRecognition\Debug\NumberPlateRecognition.exe
文件 3579744 2015-05-21 00:02 NumberPlateRecognition\Debug\NumberPlateRecognition.ilk
文件 5009408 2015-05-21 00:02 NumberPlateRecognition\Debug\NumberPlateRecognition.pdb
文件 3392688 2012-12-29 04:28 NumberPlateRecognition\Debug\OCR.xm
文件 2561352 2012-12-29 04:28 NumberPlateRecognition\Debug\SVM.xm
目录 0 2015-05-20 20:44 NumberPlateRecognition\Debug\test\
文件 57741 2015-05-20 20:38 NumberPlateRecognition\Debug\test\0657BLR.jpg
文件 196236 2012-12-29 04:28 NumberPlateRecognition\Debug\test\2715DTZ.jpg
文件 293009 2012-12-29 04:28 NumberPlateRecognition\Debug\test\3028BYS.JPG
文件 53381 2015-05-20 20:44 NumberPlateRecognition\Debug\test\3056BMT.jpg
文件 393261 2012-12-29 04:28 NumberPlateRecognition\Debug\test\3154FFY.JPG
文件 319706 2012-12-29 04:28 NumberPlateRecognition\Debug\test\3266CNT.JPG
文件 281617 2012-12-29 04:28 NumberPlateRecognition\Debug\test\3732FWW.JPG
文件 14959 2015-05-20 20:42 NumberPlateRecognition\Debug\test\3786GHJ.jpg
文件 373921 2012-12-29 04:28 NumberPlateRecognition\Debug\test\5445BSX.JPG
文件 328567 2012-12-29 04:28 NumberPlateRecognition\Debug\test\7215BGN.JPG
文件 267098 2012-12-29 04:28 NumberPlateRecognition\Debug\test\8995CCN.JPG
文件 514614 2012-12-29 04:28 NumberPlateRecognition\Debug\test\9588DWV.jpg
文件 356947 2012-12-29 04:28 NumberPlateRecognition\Debug\test\9773BNB.jpg
文件 365670 2012-12-29 04:28 NumberPlateRecognition\Debug\test\DSC_0562.jpg
文件 386667 2012-12-29 04:28 NumberPlateRecognition\Debug\test\DSC_0566.jpg
目录 0 2015-05-21 00:50 NumberPlateRecognition\NumberPlateRecognition\
文件 17891328 2015-05-21 00:59 NumberPlateRecognition\NumberPlateRecognition.sdf
文件 1012 2015-05-20 19:28 NumberPlateRecognition\NumberPlateRecognition.sln
文件 33280 2015-05-21 00:59 NumberPlateRecognition\NumberPlateRecognition.v12.suo
目录 0 2015-05-21 00:02 NumberPlateRecognition\NumberPlateRecognition\Debug\
文件 936807 2015-05-21 00:02 NumberPlateRecognition\NumberPlateRecognition\Debug\ImageRecognition.obj
............此处省略25个文件信息
评论
共有 条评论