最近在做车牌识别项目,网上资料蛮多。
参考资料:
我自己的车牌处理过程主要分为3个阶段:
预处理 --> 车牌定位 --> 字符分割与匹配
预处理分为:灰度化、直方图增强、滤波去噪、边缘检测
灰度化:
理论:Gray= 0.11B+ 0.59G+ 0.3R
bool GrayImage(const char* fileFullName)
{
assert(fileFullName != NULL);
IplImage* img = cvLoadImage(fileFullName, CV_LOAD_IMAGE_GRAYSCALE);
if(img == NULL) return 0;
IplImage* grayImage7;
grayImage7 = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
//定义与图像关联的数据指针
CvMat* pGrayMat7 = NULL;
pGrayMat7 = cvCreateMat(img->height, img->width, CV_32FC1);
BYTE data1; //中间过程变量
BYTE data2;
BYTE data3;
BYTE data7;
for(int j=0; j<img->height; j++) //高
{ for(int i=0; i<img->width; i++) //宽
{
data1 = (BYTE)img->imageData[j*img->widthStep + i*3]; //B分量
data2 = (BYTE)img->imageData[j*img->widthStep + i*3 + 1];//G分量
data3 = (BYTE)img->imageData[j*img->widthStep + i*3 + 2];//R分量
data7 = (BYTE)((114*data1+587*data2+299*data3)/1000);
cvmSet(pGrayMat7, j, i, data7);
}
}
cvConvert(pGrayMat7, grayImage7);
cvNamedWindow("灰度化", CV_WINDOW_AUTOSIZE);
cvShowImage("灰度化", grayImage7);
cvWaitKey(0);
cvDestroyWindow("灰度化");
cvReleaseImage(&img);
cvReleaseImage(&grayImage7);
cvReleaseMat(&pGrayMat7);
return TRUE;
}