• 大小: 9.66MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-25
  • 语言: C/C++
  • 标签:

资源简介

这是本人最近做的车牌定位程序,程序是用C++和OpenCV编写的。程序中包含了30张图片,识别率能达到90%,程序可以作为OpencV初学者实例,或者是作为本科生的毕业设计。

资源截图

代码片段和文件信息

#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; //长宽比
int min = 20*aspect*20; //最小区域
int max = 180*aspect*180;  //最大区域
float rmin = aspect - aspect*error; //考虑误差后的最小长宽比
float rmax = aspect + aspect*error; //考虑误差后的最大长宽比

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 < min || area > max) || (r< rmin || r > rmax)  )
return false;
else
return true;
}

void posDetect(Mat &inputImage  vector  & rects  )   //初步找到候选区域 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算法自动获得阈值
Mat element = getStructuringElement(MORPH_RECT Size(17 3));  //闭形态学的结构元素
morphologyEx(img_threshold img_thresholdCV_MOP_CLOSEelement); 
morphologyEx(img_threshold img_thresholdMORPH_OPENelement);
//namedWindow(“img“CV_WINDOW_NORMAL);
//imshow(“img“img_threshold);
//waitKey();
//寻找车牌区域的轮廓
vector< vector  > contours;
findContours(img_threshold contoursCV_RETR_EXTERNAL CV_CHAIN_APPROX_NONE);//只检测外轮廓
//对候选的轮廓进行进一步筛选
vector< vector  > ::iterator itc = contours.begin();

while( itc != contours.end())
{
RotatedRect mr = minAreaRect(Mat( *itc )); //返回每个轮廓的最小有界矩形区域
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; //长宽比
int min = 20*aspect*20; //最小区域
int max = 180*aspect*180;  //最大区域
float rmin = aspect - 2*aspect*error; //考虑误差后的最小长宽比
float rmax = aspect + 2*aspect*error; //考虑误差后的最大长宽比

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 < min || area > max) || (r< rmin || r > rmax)  ) //满足该条件才认为该candidate为车牌区域
return false;
else
return true;
}


void normalPosArea(Mat &intputImg vector &rects_optimal vector & output_area )
{
float rangle;
for (int i = 0 ;i< rects_optimal.size() ; ++i)
{
//旋转区域
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;//旋转图像使其得到长大于高

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           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个文件信息

评论

共有 条评论

相关资源