????????????ROI_rect1.x=0.5*(letter[5]+letter[4])-10; ?
????????????ROI_rect1.y=0; ?
????????????ROI_rect1.width=20; ?
????????????ROI_rect1.height=40; ?
????????????cvSetImageROI(pImgResize,ROI_rect1); ?
????????????cvCopy(pImgResize,pImgCharThree,NULL); //獲取第3個(gè)字符 ?
????????????cvResetImageROI(pImgResize); ?
??????????????
????????????ROI_rect1.x=0.5*(letter[7]+letter[6])-10; ?
????????????ROI_rect1.y=0; ?
????????????ROI_rect1.width=20; ?
????????????ROI_rect1.height=40; ?
????????????cvSetImageROI(pImgResize,ROI_rect1); ?
????????????cvCopy(pImgResize,pImgCharFour,NULL); //獲取第4個(gè)字符 ?
????????????cvResetImageROI(pImgResize); ?
??????????????
????????????ROI_rect1.x=0.5*(letter[9]+letter[8])-10; ?
????????????ROI_rect1.y=0; ?
????????????ROI_rect1.width=20; ?
????????????ROI_rect1.height=40; ?
????????????cvSetImageROI(pImgResize,ROI_rect1); ?
????????????cvCopy(pImgResize,pImgCharFive,NULL); //獲取第5個(gè)字符 ?
????????????cvResetImageROI(pImgResize); ?
??????????????
????????????ROI_rect1.x=0.5*(letter[11]+letter[10])-10; ?
????????????ROI_rect1.y=0; ?
????????????ROI_rect1.width=20; ?
????????????ROI_rect1.height=40; ?
????????????cvSetImageROI(pImgResize,ROI_rect1); ?
????????????cvCopy(pImgResize,pImgCharSix,NULL); //獲取第6個(gè)字符 ?
????????????cvResetImageROI(pImgResize); ?
??????????????
????????????ROI_rect1.x=0.5*(letter[13]+letter[12])-10; ?
????????????ROI_rect1.y=0; ?
????????????ROI_rect1.width=20; ?
????????????ROI_rect1.height=40; ?
????????????cvSetImageROI(pImgResize,ROI_rect1); ?
????????????cvCopy(pImgResize,pImgCharSeven,NULL); //獲取第7個(gè)字符 ?
????????????cvResetImageROI(pImgResize); ?
??
??
??
????????????// 釋放內(nèi)存 ?
????????????delete []num_h; ???
????????????num_h=NULL; ?
??
} ?
?
字符識別
[cpp] view plain copy
int CMyDialog::CodeRecognize(IplImage *imgTest, int num, int char_num) ?
{ ?
????if (imgTest==NULL) ?
????{ ??
????????return 0; ?
????} ?
??????
????int i=0,j=0,k=0,t=0; ?
????int ?char_start=0,char_end=0; ?
????int num_t[CHARACTER ]={0}; ?
??????
??????
?????switch(num)//這里這樣分 可以提高效率,并且提高了識別率 ?
?????{ ?
????????case 0: ?char_start =0; ????????// 數(shù)字 ?
?????????????????????????char_end ?= 9; ?
??????????????????????????break; ?
????????case 1: ?char_start =10; ???????// 英文 ?
?????????????????????????char_end ?= 35; ?
??????????????????????????break; ?
????????case 2: ?char_start =0; ??????// 英文和數(shù)字 ?
?????????????????????????char_end ?= 35; ?
??????????????????????????break; ???
????????case 3: ?char_start =36; ??????// 中文 ?
?????????????????????????char_end ?= TEMPLETENUM-1; ?
??????????????????????????break; ?
????????????default: break; ??????????????????
?????} ?
??
????// 提取前8個(gè)特征 ?
????for(k=0; k<8; k++) ?
????{ ??
????????for(j=int(k/2)*10; j
????????????for(i=(k%2)*10;i<(k%2+1)*10;i++) ?
????????????{ ????????
???????????????num_t[k]+=CV_IMAGE_ELEM(imgTest,uchar,j,i)/255 ; ?
????????????} ????????
????????} ?
??
????????// 第9個(gè)特征 前8個(gè)特征的和作為第9個(gè)特征值 ?
????????num_t[8]+= num_t[k]; ???
????} ?
????
????for(i=0;i<20;i++) ????
????????num_t[9]+=CV_IMAGE_ELEM(imgTest,uchar,10,i)/255 ; ?
????for(i=0;i<20;i++) ?
????????num_t[10]+=CV_IMAGE_ELEM(imgTest,uchar,20,i)/255 ; ?
????for(i=0;i<20;i++) ?
????????num_t[11]+=CV_IMAGE_ELEM(imgTest,uchar,30,i)/255 ; ?
????
????for(j=0;j<40;j++) ?
????????num_t[12]+=CV_IMAGE_ELEM(imgTest,uchar,j,7)/255; ?
????for(j=0;j<40;j++) ?
????????num_t[13]+=CV_IMAGE_ELEM(imgTest,uchar,j,10)/255 ; ?
????for(j=0;j<40;j++) ?
????????num_t[14]+=CV_IMAGE_ELEM(imgTest,uchar,j,13)/255 ; ?
??
????int num_tt[CHARACTER]={0}; ?
????int matchnum=0; ?//可以說是 匹配度或 相似度 ?
????int matchnum_max=0; ???
????int matchcode = 0; ????????// 匹配號 ?
??
????j=0; ?
??
????for(k=char_start;k<=char_end;k++) ?
????{ ?
????????matchnum=0; ?
????
????????for(i=0;i<8;i++) //區(qū)域的匹配 ?
????????{ ?
????????????if (abs(num_t[i]-Num_Templete[k][i])<=2)//與模板里的相應(yīng)值進(jìn)行匹配 ?
????????????????matchnum++; ?
????????} ?
??????????
???????if(Num_Templete[k][i]-abs(num_t[i])<=8)//對第9個(gè)特征進(jìn)行匹配 ??
?????????????matchnum+=2; ????
???????for(i=9;i
???????????if (Num_Templete[k][i]>=5) ?//特征值 大于5 ??
???????????{ ?
????????????????if(abs(num_t[i]-Num_Templete[k][i])<=1) ?
????????????????matchnum+=2; ?
???????????} ?
???????????else if( num_t[i]==Num_Templete[k][i]) ?
???????????{ ??
????????????????matchnum+=2; ?
???????????} ?
????????} ?
????????if(matchnum>matchnum_max) ?
????????{ ?
??????????????matchnum_max=matchnum; ?//保留最大的 匹配 ??
??????????????matchcode= k; ?//記錄 識別的字符的 索引 ??
????????} ????
????} ?
????//識別輸出 ?存放輸出結(jié)果 ?
????G_PlateChar[char_num]=PlateCode[matchcode]; //保存下該字符 ?
} ?
?
評論
查看更多