资源简介
这是本人最近做的车牌定位程序,程序是用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个文件信息
评论
共有 条评论