-
大小: 9.66MB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2023-10-25
- 語(yǔ)言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
這是本人最近做的車牌定位程序,程序是用C++和OpenCV編寫(xiě)的。程序中包含了30張圖片,識(shí)別率能達(dá)到90%,程序可以作為OpencV初學(xué)者實(shí)例,或者是作為本科生的畢業(yè)設(shè)計(jì)。

代碼片段和文件信息
#include?“carID_Detection.h“
void?RgbConvToGray(const?Mat&?inputImageMat?&?outpuImage)??//g?=?0.3R+0.59G+0.11B
{
outpuImage?=?Mat(inputImage.rows?inputImage.cols?CV_8UC1);??
for?(int?i?=?0?;i {
uchar?*ptrGray?=?outpuImage.ptr(i);?
const?Vec3b?*?ptrRgb?=?inputImage.ptr(i);
for?(int?j?=?0?;j {
ptrGray[j]?=?0.3*ptrRgb[j][2]+0.59*ptrRgb[j][1]+0.11*ptrRgb[j][0];
}
}
}
bool?verifySizes_closeImg(const?RotatedRect?&?candidate)
{
float?error?=?0.4;
const?float?aspect?=?44/14;?//長(zhǎng)寬比
int?min?=?20*aspect*20;?//最小區(qū)域
int?max?=?180*aspect*180;??//最大區(qū)域
float?rmin?=?aspect?-?aspect*error;?//考慮誤差后的最小長(zhǎng)寬比
float?rmax?=?aspect?+?aspect*error;?//考慮誤差后的最大長(zhǎng)寬比
int?area?=?candidate.size.height?*?candidate.size.width;
float?r?=?(float)candidate.size.width/(float)candidate.size.height;
if(r?<1)
r?=?1/r;
if(?(area??max)?||?(r?rmax)??)
return?false;
else
return?true;
}
void?posDetect(Mat?&inputImage??vector??&?rects??)???//初步找到候選區(qū)域?rects
{
Mat?img_sobel;
Sobel(inputImage??img_sobel??CV_8U?10310);
Mat?img_threshold;
threshold(img_sobel??img_threshold0255??CV_THRESH_OTSU+CV_THRESH_BINARY);?//otsu算法自動(dòng)獲得閾值
Mat?element?=?getStructuringElement(MORPH_RECT?Size(17?3));??//閉形態(tài)學(xué)的結(jié)構(gòu)元素
morphologyEx(img_threshold?img_thresholdCV_MOP_CLOSEelement);?
morphologyEx(img_threshold?img_thresholdMORPH_OPENelement);
//namedWindow(“img“CV_WINDOW_NORMAL);
//imshow(“img“img_threshold);
//waitKey();
//尋找車牌區(qū)域的輪廓
vector?>?contours;
findContours(img_threshold?contoursCV_RETR_EXTERNAL?CV_CHAIN_APPROX_NONE);//只檢測(cè)外輪廓
//對(duì)候選的輪廓進(jìn)行進(jìn)一步篩選
vector?>?::iterator?itc?=?contours.begin();
while(?itc?!=?contours.end())
{
RotatedRect?mr?=?minAreaRect(Mat(?*itc?));?//返回每個(gè)輪廓的最小有界矩形區(qū)域
if(!verifySizes(mr))??//判斷矩形輪廓是否符合要求
{
itc?=?contours.erase(itc);
}
else?????
{
rects.push_back(mr);
++itc;
}??????
}
}
bool?verifySizes(const?RotatedRect?&?candidate)
{
float?error?=?0.4;
const?float?aspect?=?44/14;?//長(zhǎng)寬比
int?min?=?20*aspect*20;?//最小區(qū)域
int?max?=?180*aspect*180;??//最大區(qū)域
float?rmin?=?aspect?-?2*aspect*error;?//考慮誤差后的最小長(zhǎng)寬比
float?rmax?=?aspect?+?2*aspect*error;?//考慮誤差后的最大長(zhǎng)寬比
int?area?=?candidate.size.height?*?candidate.size.width;
float?r?=?(float)candidate.size.width/(float)candidate.size.height;
if(r?<1)
r?=?1/r;
if(?(area??max)?||?(r?rmax)??)?//滿足該條件才認(rèn)為該candidate為車牌區(qū)域
return?false;
else
return?true;
}
void?normalPosArea(Mat?&intputImg?vector?&rects_optimal?vector?&?output_area?)
{
float?rangle;
for?(int?i?=?0?;i {
//旋轉(zhuǎn)區(qū)域
angle?=?rects_optimal[i].angle;
r?=?(float)rects_optimal[i].size.width?/?(float)?(float)rects_optimal[i].size.height;
if(r<1)
angle?=?90?+?angle;//旋轉(zhuǎn)圖像使其得到長(zhǎng)大于高
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-03-17?21:15??CarNumber\
?????文件??????145637??2016-06-17?11:39??CarNumber\1.jpg
?????文件??????164788??2016-06-17?11:39??CarNumber\10.jpg
?????文件??????122761??2016-06-17?11:39??CarNumber\11.jpg
?????文件??????307370??2016-06-17?11:39??CarNumber\12.jpg
?????文件??????160888??2016-06-17?11:39??CarNumber\13.jpg
?????文件??????132182??2016-06-17?11:39??CarNumber\14.jpg
?????文件??????122507??2016-06-17?11:39??CarNumber\15.jpg
?????文件??????146481??2016-06-17?11:39??CarNumber\16.jpg
?????文件??????115442??2016-06-17?11:39??CarNumber\17.jpg
?????文件??????116986??2016-06-17?11:39??CarNumber\18.jpg
?????文件??????152912??2016-06-17?11:39??CarNumber\19.jpg
?????文件??????151518??2016-06-17?11:39??CarNumber\2.jpg
?????文件??????121903??2016-06-17?11:39??CarNumber\20.jpg
?????文件??????135255??2016-06-17?11:39??CarNumber\21.jpg
?????文件??????117527??2016-06-17?11:39??CarNumber\22.jpg
?????文件??????153424??2016-06-17?11:39??CarNumber\23.jpg
?????文件??????141034??2016-06-17?11:39??CarNumber\24.jpg
?????文件??????145079??2016-06-17?11:39??CarNumber\25.jpg
?????文件??????136953??2016-06-17?11:39??CarNumber\26.jpg
?????文件??????120412??2016-06-17?11:39??CarNumber\27.jpg
?????文件??????146480??2016-06-17?11:39??CarNumber\28.jpg
?????文件??????156454??2016-06-17?11:39??CarNumber\29.jpg
?????文件??????157747??2016-06-17?11:39??CarNumber\3.jpg
?????文件??????105273??2016-06-17?11:39??CarNumber\30.jpg
?????文件??????158448??2016-06-17?11:39??CarNumber\31.jpg
?????文件??????146374??2016-06-17?11:39??CarNumber\4.jpg
?????文件??????134187??2016-06-17?11:39??CarNumber\5.jpg
?????文件??????126343??2016-06-17?11:39??CarNumber\6.jpg
?????文件??????370419??2016-06-17?11:39??CarNumber\7.jpg
?????文件??????169780??2016-06-17?11:39??CarNumber\8.jpg
............此處省略11個(gè)文件信息
評(píng)論
共有 條評(píng)論