- if(flag) break;
- }
- cout<<"the start col:"<<col_start<<endl;
- cvLine(pImg8u,cvPoint(col_start,row_start),cvPoint(col_start,row_end),cvScalar(255,0,0),1,8,0);
- cvNamedWindow("划线_左",1);
- cvShowImage("划线_左",pImg8u);
-
- flag=false;
- for(i=src_son_col->width-10;i>col_start;i--) //找到右列开始
- {
- int count=0;
- for(j=row_start;j<row_end;j++)
- {
- if(S(src_son_col,i,j)==255)
- count++;
- if(count>T1)
- {
- col_end=i;
- flag=true;
- break;
- }
- }
- if(flag) break;
- }
- cout<<"the end col:"<<col_end<<endl;
- cvLine(pImg8u,cvPoint(col_end,row_start),cvPoint(col_end,row_end),cvScalar(255,0,0),1,8,0);
- cvNamedWindow("划线_左右",1);
- cvShowImage("划线_左右",pImg8u);
- }
- /******************************************************************************************\
- 定义一个子函数find_ROI,找到图片中只含有目标区域的部分
- \******************************************************************************************/
- void find_ROI(IplImage *before_ROI,IplImage *after_ROI){
- CvRect ROI_rect; //获得图片感兴趣区域
- ROI_rect.x=col_start;
- ROI_rect.y=row_start;
- ROI_rect.width=col_end-col_start;
- ROI_rect.height=row_end-row_start;
- cvSetImageROI(pImg8u,ROI_rect);
- pImg8uROI=cvCreateImage(cvSize(ROI_rect.width,ROI_rect.height),IPL_DEPTH_8U,1);
- cvCopy(pImg8u,pImg8uROI);
- cvResetImageROI(pImg8u);
- }
- /******************************************************************************************\
- 定义一个子函数cut_and_drawLine,对含有车牌有效信息的图片分割出字符,并画出分割线
- \******************************************************************************************/
- void cut_and_drawLine(IplImage *befour_cut_image ){
- ///////////////////////////////////////////////////////////////得到每个字符的双边界
- //七个字符的间距坐标间距,只看水平方向。分别为:0(0,45),1(57,102),2(136,181),3(193,238)
- // 4(250,295),5(307,352),6(364,409)
- //////////////////////////////////////////////////////////////并存放在col[]里面
- for(i=0;i<7;i++)
- {
- switch(i){
- case 0: //0是省份名占45个像素
- case 1: //1是市名的字母占45个像素
- col[i*2]=i*nCharWidth+i*nSpace;
- cout<<col[i*2]<<endl;
- col[i*2+1]=(i+1)*nCharWidth+i*nSpace;
- cout<<col[i*2+1]<<endl;
- break; //1与2之间有个点宽度是34个像素
- case 2: //2---6是剩余的字母和数字各自占45个像素
- case 3:
- case 4:
- case 5:
- case 6:
- col[i*2]=i*nCharWidth+i*nSpace+22;
- cout<<col[i*2]<<endl;
- col[i*2+1]=(i+1)*nCharWidth+i*nSpace+22;
- cout<<col[i*2+1]<<endl;
- break;
- }
-
- }
- for(i=0;i<14;i++) //画出每个字符的区域
- {
- cvLine(befour_cut_image,cvPoint(col[i],0),cvPoint(col[i],nHeight),cvScalar(255,0,0),1,8,0);
- //cout<<col[i*2]<<" "<<col[2*i+1]<<" ";
- }
- //cvNamedWindow("画出每个字符的区域",1);
- //cvShowImage("画出每个字符的区域",befour_cut_image);
-
- }
- /******************************************************************************************\
- 定义一个子函数show_every_char,显示出所有分割出来的字符
- \******************************************************************************************/
- void show_every_char(IplImage *showChar){
-
- pImgCharOne=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
- pImgCharTwo=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
- pImgCharThree=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
- pImgCharFour=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
- pImgCharFive=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
- pImgCharSix=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
- pImgCharSeven=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);
-
- CvRect ROI_rect1;
- ROI_rect1.x=col[0];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharOne,NULL); //获取第1个字符
- cvResetImageROI(showChar);
-
- ROI_rect1.x=col[2];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharTwo,NULL); //获取第2个字符
- cvResetImageROI(showChar);
-
- ROI_rect1.x=col[4];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharThree,NULL); //获取第3个字符
- cvResetImageROI(showChar);
-
- ROI_rect1.x=col[6];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharFour,NULL); //获取第4个字符
- cvResetImageROI(showChar);
-
- ROI_rect1.x=col[8];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharFive,NULL); //获取第5个字符
- cvResetImageROI(showChar);
-
- ROI_rect1.x=col[10];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharSix,NULL); //获取第6个字符
- cvResetImageROI(showChar);
-
- ROI_rect1.x=col[12];
- ROI_rect1.y=0;
- ROI_rect1.width=nCharWidth;
- ROI_rect1.height=nHeight;
- cvSetImageROI(showChar,ROI_rect1);
- cvCopy(showChar,pImgCharSeven,NULL); //获取第7个字符
- cvResetImageROI(showChar);
-
- cvNamedWindow("分割后的车牌",1);
- cvShowImage("分割后的车牌",showChar);
- cvNamedWindow("one",CV_WINDOW_AUTOSIZE);
- cvShowImage("one",pImgCharOne);
- cvNamedWindow("two",1);
- cvShowImage("two",pImgCharTwo);
- cvNamedWindow("three",1);
- cvShowImage("three",pImgCharThree);
- cvNamedWindow("four",1);
- cvShowImage("four",pImgCharFour);
- cvNamedWindow("five",1);
- cvShowImage("five",pImgCharFive);
- cvNamedWindow("six",1);
- cvShowImage("six",pImgCharSix);
- cvNamedWindow("seven",1);
- cvShowImage("seven",pImgCharSeven);
- }

|