資源簡介
基于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??max)?||?(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?>?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.xm
?????文件?????????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.xm
?????目錄???????????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個文件信息
- 上一篇:湖南大學遠程抄表管理系統畢業設計
- 下一篇:latex-xelatex 中文字體庫
評論
共有 條評論