请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
int main()
{
IplImage *imgSrc=cvLoadImage("C:\\carimage\\car.jpg");
IplImage *imgH,*imgS,*imgV,*imgHSV,*imgGray;
imgHSV=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,3);
imgH=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
imgS=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
imgV=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
cvCvtColor(imgSrc,imgHSV,CV_BGR2HSV);
cvSplit(imgHSV,imgH,imgS,imgV,0);
cvInRangeS(imgH,cvScalar(94,0,0,0),cvScalar(115,0,0,0),imgH);
cvInRangeS(imgS,cvScalar(90,0,0,0),cvScalar(255,0,0,0),imgS);
cvInRangeS(imgV,cvScalar(36,0,0,0),cvScalar(255,0,0,0),imgV);
IplImage *imgTemp,*imgHsvBinnary;
imgTemp=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
imgHsvBinnary=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
cvAnd(imgH,imgS,imgTemp);
cvAnd(imgTemp,imgV,imgHsvBinnary);
//形态学去噪
//定义结构元素
IplConvKernel *element=0;
int values[2]={255,255};
int rows=2,cols=1,anchor_x=0,anchor_y=1;
element = cvCreateStructuringElementEx(cols,rows,anchor_x,anchor_y,CV_SHAPE_CUSTOM,values);
//膨胀腐蚀
cvDilate(imgHsvBinnary,imgHsvBinnary,element,1);
cvErode(imgHsvBinnary,imgHsvBinnary,element,1);
cvNamedWindow("imgh1");
cvShowImage("imgh1",imgHsvBinnary);
imgGray=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
cvCvtColor(imgSrc,imgGray,CV_RGB2GRAY);
IplImage *imgRgbBinnary;
imgRgbBinnary=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
int Thresold=myOtsu(imgGray);//求阈值
cvThreshold(imgGray,imgRgbBinnary,Thresold,255,CV_THRESH_OTSU);
cvNamedWindow("imgh2");
cvShowImage("imgh2",imgRgbBinnary);
//车牌定位
//行定位
int hop_num=10;//字符连续跳变次数的阈值
int num=0;//计算跳变的次数
int begin=0;//跳变是否开始
int mark_Row[2]={0},k=0;//标记车牌的开始行与结束行
for(int i=imgSrc->height-1;i>=0;i--)
{
num=0;
for(int j=0;j<imgSrc->width-1;j )
{
if(cvGet2D(imgHsvBinnary,i,j).val[0]!=cvGet2D(imgHsvBinnary,i,j 1).val[0])
{
num ;
}
}
if(num>hop_num)
{
mark_Row[k]=i;
k ;
if(k>1)
k=1;
}
}
std::cout <<"mark= " << mark_Row[0] << " " << mark_Row[1];
cvLine(imgSrc,cvPoint(0,mark_Row[0]),cvPoint(imgSrc->width,mark_Row[0]),CV_RGB(255,255,0));
cvLine(imgSrc,cvPoint(0,mark_Row[1]),cvPoint(imgSrc->width,mark_Row[1]),CV_RGB(255,255,0));
//列定位
int mark_col[2]={0},num_col=0,k_col=0;
int a[100]={0},Thresold_col=10;
for(int j=0;j<imgSrc->width;j )
{
num_col=0;
for(int i=mark_Row[1];i<mark_Row[0];i )
if(cvGet2D(imgHsvBinnary,i,j).val[0]>0)
num_col ;
if(num_col>Thresold_col)
{
mark_col[k_col]=j;
k_col ;
if(k_col>1)
k_col=1;
}
}
int i=0;
cvLine(imgSrc,cvPoint(mark_col[0],0),cvPoint(mark_col[0],imgSrc->height),CV_RGB(255,0,0));
cvLine(imgSrc,cvPoint(mark_col[1],0),cvPoint(mark_col[1],imgSrc->height),CV_RGB(255,0,0));
IplImage *imgLicense;
int license_Width=(mark_col[1]-mark_col[0])/4*4;
int license_Height =mark_Row[0]-mark_Row[1];
cvSetImageROI(imgSrc,cvRect(mark_col[0],mark_Row[1],license_Width,license_Height));
imgLicense=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,imgSrc->nChannels);
cvCopy(imgSrc,imgLicense,0);
cvResetImageROI(imgSrc);
cvNamedWindow("license");
cvShowImage("license",imgLicense);
cvNamedWindow("src");
cvShowImage("src",imgSrc);
cvWaitKey(0);
return 0;
}