figure(5);plot(0:x1-1,X1),title('列方向像素点灰度值累计和'), xlabel('列值'),ylabel('累计像素量');
Px0=1; Px1=1;
%%%%%%%%%%%分割字符%%%%%%%%%%% for i=1:7
while ((X1(1,Px0)<3)&&(Px0 while (((X1(1,Px1)>=3)&&(Px1 Px1=Px1+1; else break; end end Z=bw(:,Px0:Px1,:); switch strcat('Z',num2str(i)) %num2str 把数值转换成字符串 把num2str所指字符串添加到Z结尾处 case 'Z1' PIN0=Z; b=imresize(Z,[40 20]);imwrite(b,'1.jpg'); %将大小限制为20*40 case 'Z2' PIN1=Z; b=imresize(Z,[40 20]);imwrite(b,'2.jpg') case 'Z3' PIN2=Z; b=imresize(Z,[40 20]);imwrite(b,'3.jpg') case 'Z4' PIN3=Z; b=imresize(Z,[40 20]);imwrite(b,'4.jpg') case 'Z5' PIN4=Z; b=imresize(Z,[40 20]);imwrite(b,'5.jpg') case 'Z6' PIN5=Z; b=imresize(Z,[40 20]);imwrite(b,'6.jpg') otherwise PIN6=Z; b=imresize(Z,[40 20]);imwrite(b,'7.jpg') end Px0=Px1; end liccode=char(['0':'9' 'A':'Z' '粤浙辽苏豫陕鲁']); %建立自动识别字符代码表 SubBw2=zeros(40,20); l=1; for I=1:7 ii=int2str(I); %将数据I四舍五入变成字符 t=imread([ii,'.jpg']); SegBw2=bwmorph(im2bw(imresize(t,[40 20],'nearest')),'thin',inf); %分割后图像细化 a=abs(log(invmoments(SegBw2))); %不变矩 if l==1 %第一位汉字识别 kmin=37; kmax=43; elseif l==2 %第二位 A~Z 字母识别 kmin=11; kmax=36; else l>=3 %第三位以后是字母或数字识别 kmin=1; kmax=36; end for k2=kmin:kmax fname=strcat('字符模板\\',liccode(k2),'.jpg'); SamBw2 =bwmorph(im2bw(imread(fname)),'thin',inf); %字模细化 b=abs(log(invmoments(SamBw2))); %不变矩 Error(k2)=sum(abs(a-b)); %求出最小值 end Error1=Error(kmin:kmax); minerror=min(Error1); findc=find(Error1==minerror); Code(l*2-1)=liccode(findc(1)+kmin-1); Code(l*2)=' '; l=l+1; end set(handles.axes3,'HandleVisibility','ON'); axes(handles.axes3); imshow(dw),title (['车牌号码:', Code],'Color','b'); 3、 空位检测 o1=im2bw(imread('1.bmp')); %读取 12345 并变为二值图片 o2=im2bw(imread('2.bmp')); o3=im2bw(imread('3.bmp')); o4=im2bw(imread('4.bmp')); o5=im2bw(imread('5.bmp')); SE = strel('square',3); oo1=imdilate(o1,SE)-o1; %将12345进行膨胀 然后减去原图得到背景 oo2=imdilate(o2,SE)-o2; oo3=imdilate(o3,SE)-o3; oo4=imdilate(o4,SE)-o4; oo5=imdilate(o5,SE)-o5; a=im2bw(handles.img); temp1=bwhitmiss(a,o1,oo1); %击中函数 temp2=bwhitmiss(a,o2,oo2); temp3=bwhitmiss(a,o3,oo3); temp4=bwhitmiss(a,o4,oo4); temp5=bwhitmiss(a,o5,oo5); if nonzeros(temp1) a='1号车位'; else a=' '; end set(handles.edit2,'string',num2str(a)); if nonzeros(temp2) b='2号车位'; else b=''; end set(handles.edit4,'string',num2str(b)); if nonzeros(temp3) c='3号车位'; else c=''; end set(handles.edit5,'string',num2str(c)); if nonzeros(temp4) d='4号车位'; else d=''; end set(handles.edit6,'string',num2str(d)); if nonzeros(temp5)