分享

opencv车牌识别(超详细注释)

 Rainbow_Heaven 2017-06-24
  1.         if(flag) break;  
  2.     }  
  3.     cout<<"the start col:"<<col_start<<endl;  
  4.     cvLine(pImg8u,cvPoint(col_start,row_start),cvPoint(col_start,row_end),cvScalar(255,0,0),1,8,0);  
  5.     cvNamedWindow("划线_左",1);  
  6.     cvShowImage("划线_左",pImg8u);  
  7.   
  8.     flag=false;  
  9.     for(i=src_son_col->width-10;i>col_start;i--)           //找到右列开始  
  10.     {  
  11.         int count=0;  
  12.         for(j=row_start;j<row_end;j++)  
  13.         {  
  14.             if(S(src_son_col,i,j)==255)  
  15.                 count++;  
  16.             if(count>T1)  
  17.             {  
  18.                 col_end=i;  
  19.                 flag=true;  
  20.                 break;  
  21.             }  
  22.         }  
  23.         if(flag) break;  
  24.     }  
  25.     cout<<"the end col:"<<col_end<<endl;  
  26.     cvLine(pImg8u,cvPoint(col_end,row_start),cvPoint(col_end,row_end),cvScalar(255,0,0),1,8,0);  
  27.     cvNamedWindow("划线_左右",1);  
  28.     cvShowImage("划线_左右",pImg8u);  
  29. }  
  30. /******************************************************************************************\  
  31.               定义一个子函数find_ROI,找到图片中只含有目标区域的部分  
  32. \******************************************************************************************/  
  33. void find_ROI(IplImage *before_ROI,IplImage *after_ROI){  
  34.     CvRect ROI_rect;                 //获得图片感兴趣区域  
  35.     ROI_rect.x=col_start;  
  36.     ROI_rect.y=row_start;  
  37.     ROI_rect.width=col_end-col_start;  
  38.     ROI_rect.height=row_end-row_start;  
  39.     cvSetImageROI(pImg8u,ROI_rect);  
  40.     pImg8uROI=cvCreateImage(cvSize(ROI_rect.width,ROI_rect.height),IPL_DEPTH_8U,1);  
  41.     cvCopy(pImg8u,pImg8uROI);  
  42.     cvResetImageROI(pImg8u);  
  43.     }  
  44.  /******************************************************************************************\  
  45.       定义一个子函数cut_and_drawLine,对含有车牌有效信息的图片分割出字符,并画出分割线  
  46. \******************************************************************************************/  
  47.  void cut_and_drawLine(IplImage *befour_cut_image ){  
  48. ///////////////////////////////////////////////////////////////得到每个字符的双边界  
  49.     //七个字符的间距坐标间距,只看水平方向。分别为:0(0,45),1(57,102),2(136,181),3(193,238)  
  50.     //                                              4(250,295),5(307,352),6(364,409)  
  51. //////////////////////////////////////////////////////////////并存放在col[]里面  
  52.      for(i=0;i<7;i++)            
  53.     {  
  54.         switch(i){  
  55.             case 0:                                          //0是省份名占45个像素  
  56.             case 1:                                          //1是市名的字母占45个像素  
  57.                 col[i*2]=i*nCharWidth+i*nSpace;  
  58.                 cout<<col[i*2]<<endl;  
  59.                 col[i*2+1]=(i+1)*nCharWidth+i*nSpace;  
  60.                 cout<<col[i*2+1]<<endl;  
  61.                 break;                                       //1与2之间有个点宽度是34个像素  
  62.             case 2:                                          //2---6是剩余的字母和数字各自占45个像素  
  63.             case 3:  
  64.             case 4:  
  65.             case 5:  
  66.             case 6:  
  67.                 col[i*2]=i*nCharWidth+i*nSpace+22;  
  68.                 cout<<col[i*2]<<endl;  
  69.                 col[i*2+1]=(i+1)*nCharWidth+i*nSpace+22;  
  70.                 cout<<col[i*2+1]<<endl;  
  71.                 break;  
  72.         }  
  73.   
  74.     }  
  75.     for(i=0;i<14;i++)        //画出每个字符的区域  
  76.     {  
  77.         cvLine(befour_cut_image,cvPoint(col[i],0),cvPoint(col[i],nHeight),cvScalar(255,0,0),1,8,0);  
  78.         //cout<<col[i*2]<<" "<<col[2*i+1]<<" ";  
  79.     }  
  80.     //cvNamedWindow("画出每个字符的区域",1);  
  81.     //cvShowImage("画出每个字符的区域",befour_cut_image);  
  82.   
  83.  }  
  84. /******************************************************************************************\  
  85.               定义一个子函数show_every_char,显示出所有分割出来的字符  
  86. \******************************************************************************************/  
  87. void show_every_char(IplImage *showChar){  
  88.       
  89.     pImgCharOne=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  90.     pImgCharTwo=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  91.     pImgCharThree=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  92.     pImgCharFour=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  93.     pImgCharFive=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  94.     pImgCharSix=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  95.     pImgCharSeven=cvCreateImage(cvSize(nCharWidth,nHeight),IPL_DEPTH_8U,1);  
  96.   
  97.     CvRect ROI_rect1;  
  98.     ROI_rect1.x=col[0];  
  99.     ROI_rect1.y=0;  
  100.     ROI_rect1.width=nCharWidth;  
  101.     ROI_rect1.height=nHeight;  
  102.     cvSetImageROI(showChar,ROI_rect1);  
  103.     cvCopy(showChar,pImgCharOne,NULL); //获取第1个字符  
  104.     cvResetImageROI(showChar);  
  105.   
  106.     ROI_rect1.x=col[2];  
  107.     ROI_rect1.y=0;  
  108.     ROI_rect1.width=nCharWidth;  
  109.     ROI_rect1.height=nHeight;  
  110.     cvSetImageROI(showChar,ROI_rect1);  
  111.     cvCopy(showChar,pImgCharTwo,NULL); //获取第2个字符  
  112.     cvResetImageROI(showChar);  
  113.   
  114.     ROI_rect1.x=col[4];  
  115.     ROI_rect1.y=0;  
  116.     ROI_rect1.width=nCharWidth;  
  117.     ROI_rect1.height=nHeight;  
  118.     cvSetImageROI(showChar,ROI_rect1);  
  119.     cvCopy(showChar,pImgCharThree,NULL); //获取第3个字符  
  120.     cvResetImageROI(showChar);  
  121.   
  122.     ROI_rect1.x=col[6];  
  123.     ROI_rect1.y=0;  
  124.     ROI_rect1.width=nCharWidth;  
  125.     ROI_rect1.height=nHeight;  
  126.     cvSetImageROI(showChar,ROI_rect1);  
  127.     cvCopy(showChar,pImgCharFour,NULL); //获取第4个字符  
  128.     cvResetImageROI(showChar);  
  129.   
  130.     ROI_rect1.x=col[8];  
  131.     ROI_rect1.y=0;  
  132.     ROI_rect1.width=nCharWidth;  
  133.     ROI_rect1.height=nHeight;  
  134.     cvSetImageROI(showChar,ROI_rect1);  
  135.     cvCopy(showChar,pImgCharFive,NULL); //获取第5个字符  
  136.     cvResetImageROI(showChar);  
  137.   
  138.     ROI_rect1.x=col[10];  
  139.     ROI_rect1.y=0;  
  140.     ROI_rect1.width=nCharWidth;  
  141.     ROI_rect1.height=nHeight;  
  142.     cvSetImageROI(showChar,ROI_rect1);  
  143.     cvCopy(showChar,pImgCharSix,NULL); //获取第6个字符  
  144.     cvResetImageROI(showChar);  
  145.   
  146.     ROI_rect1.x=col[12];  
  147.     ROI_rect1.y=0;  
  148.     ROI_rect1.width=nCharWidth;  
  149.     ROI_rect1.height=nHeight;  
  150.     cvSetImageROI(showChar,ROI_rect1);  
  151.     cvCopy(showChar,pImgCharSeven,NULL); //获取第7个字符  
  152.     cvResetImageROI(showChar);  
  153.       
  154.     cvNamedWindow("分割后的车牌",1);  
  155.     cvShowImage("分割后的车牌",showChar);  
  156.     cvNamedWindow("one",CV_WINDOW_AUTOSIZE);  
  157.     cvShowImage("one",pImgCharOne);  
  158.     cvNamedWindow("two",1);  
  159.     cvShowImage("two",pImgCharTwo);  
  160.     cvNamedWindow("three",1);  
  161.     cvShowImage("three",pImgCharThree);  
  162.     cvNamedWindow("four",1);  
  163.     cvShowImage("four",pImgCharFour);  
  164.     cvNamedWindow("five",1);  
  165.     cvShowImage("five",pImgCharFive);  
  166.     cvNamedWindow("six",1);  
  167.     cvShowImage("six",pImgCharSix);  
  168.     cvNamedWindow("seven",1);  
  169.     cvShowImage("seven",pImgCharSeven);  
  170.     }  

         

   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多