车牌识别系统Matlab算法实现

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  2. % 字符分割模块算法  
  3. % 定位剪切后的彩色车牌图像--灰度--二值化--统一到黑底白字--去除上下边框  
  4. % --切割出最小范围--滤波--形态学处理--分割出7个字符  
  5.   
  6. % 去除上下边框算法:  
  7. % 1.黑白跳变小于阈值则被视为背景;2.连续白线大于某阈值则该白线被认为是背景  
  8. % 3.单行白色大于阈值则被认为是背景,考虑FLAG的值;  
  9. % 4.做完以上处理后,上边1/2 中搜索连续两条黑线,认为该黑线以上为背景;在下边1/2 中搜索连续两条黑线,认为该黑线以下为背景  
  10. % 归一化为 40*20 ,商用系统程序中归一化为 32*16 ,此处仅演示作用  
  11. function [d]=lpcseg(jpg)  
  12. I=imread('car1.jpg');  
  13. I1=rgb2gray(I);  
  14. I2=edge(I1,'robert',0.15,'both');  
  15. se=[1;1;1];  
  16. I3=imerode(I2,se);  
  17. se=strel('rectangle',[25,25]);  
  18. I4=imclose(I3,se);  
  19. I5=bwareaopen(I4,2000);  
  20. [y,x,z]=size(I5);  
  21. myI=double(I5);  
  22. tic  
  23.  white_y=zeros(y,1);  
  24.  for i=1:y  
  25.     for j=1:x  
  26.              if(myI(i,j,1)==1)   
  27.                 white_y(i,1)= white_y(i,1)+1;   
  28.             end    
  29.      end         
  30.  end  
  31.  [temp MaxY]=max(white_y);  
  32.  PY1=MaxY;  
  33.  while ((white_y(PY1,1)>=5)&&(PY1>1))  
  34.         PY1=PY1-1;  
  35.  end      
  36.  PY2=MaxY;  
  37.  while ((white_y(PY2,1)>=5)&&(PY2<y))  
  38.         PY2=PY2+1;  
  39.  end  
  40.  IY=I(PY1:PY2,:,:);  
  41.  white_x=zeros(1,x);  
  42.  for j=1:x  
  43.      for i=PY1:PY2  
  44.             if(myI(i,j,1)==1)  
  45.                 white_x(1,j)= white_x(1,j)+1;                 
  46.             end    
  47.      end         
  48.  end  
  49.     
  50.  PX1=1;  
  51.  while ((white_x(1,PX1)<3)&&(PX1<x))  
  52.        PX1=PX1+1;  
  53.  end      
  54.  PX2=x;  
  55.  while ((white_x(1,PX2)<3)&&(PX2>PX1))  
  56.         PX2=PX2-1;  
  57.  end  
  58.  PX1=PX1-1;  
  59.  PX2=PX2+1;  
  60.   dw=I(PY1:PY2-8,PX1:PX2,:);  
  61.  t=toc;   
  62. figure(1),subplot(3,2,1),imshow(dw),title('定位剪切后的彩色车牌图像')  
  63. imwrite(dw,'dw.jpg');  
  64. [filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');  
  65. jpg=strcat(filepath,filename);  
  66. a=imread(jpg);  
  67. %figure(1);subplot(3,2,1),imshow(a),title('1.定位剪切后的彩色车牌图像')  
  68. b=rgb2gray(a);  
  69. imwrite(b,'2.车牌灰度图像.jpg');  
  70. figure(1);subplot(3,2,2),imshow(b),title('2.车牌灰度图像')  
  71. g_max=double(max(max(b)));  
  72. g_min=double(min(min(b)));  
  73. T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值  
  74. [m,n]=size(b);  
  75. d=(double(b)>=T);  % d:二值图像  
  76. imwrite(d,'3.车牌二值图像.jpg');  
  77. figure(1);subplot(3,2,3),imshow(d),title('3.车牌二值图像')  
  78.   
  79. % 旋转  
  80. rotate=0;  
  81. d=imread('3.车牌二值图像.jpg');  
  82. bw=edge(d);  
  83. [m,n]=size(d);  
  84. theta=1:179;  
  85. % bw 表示需要变换的图像,theta 表示变换的角度  
  86. % 返回值 r 表示的列中包含了对应于 theta中每一个角度的 Radon 变换结果  
  87. % 向量 xp 包含相应的沿 x轴的坐标  
  88. [r,xp]=radon(bw,theta);  
  89. i=find(r>0);  
  90. [foo,ind]=sort(-r(i));  
  91. k=i(ind(1:size(i)));  
  92. [y,x]=ind2sub(size(r),k);  
  93. [mm,nn]=size(x);  
  94. if mm~=0 && nn~=0  
  95.     j=1;  
  96.     while mm~=1 && j<180 && nn~=0  
  97.         i=find(r>j);  
  98.         [foo,ind]=sort(-r(i));  
  99.         k=i(ind(1:size(i)));  
  100.         [y,x]=ind2sub(size(r),k);  
  101.         [mm,nn]=size(x);  
  102.         j=j+1;  
  103.     end  
  104.     if nn~=0  
  105.         if x   % Enpty matrix: 0-by-1 when x is an enpty array.  
  106.             x=x;  
  107.         else  % 可能 x 为空值  
  108.             x=90; % 其实就是不旋转  
  109.         end  
  110.         d=imrotate(d,abs(90-x)); % 旋转图像  
  111.         rotate=1;  
  112.     end  
  113. end  
  114. imwrite(d,'4.Radon 变换旋转后的二值图像.jpg');  
  115. figure(1),subplot(3,2,4),imshow(d),title('4.Radon 变换旋转后的二值图像')  
  116.   
  117. % 统一到白底黑字  
  118. [m,n]=size(d);  
  119. % flag=0 表示原来就是白底黑字,否则表示原来是黑底白字  
  120. flag=0;  
  121. c=d([round(m/3):m-round(m/3)],[round(n/3):n-round(n/3)]);  
  122. if sum(sum(c))/m/n*9>0.5  
  123.     d=~d;flag=1;  
  124. end  
  125. % 对反色后的图像预处理,整列几乎为白的认为是背景  
  126. if flag==1  
  127.     for j=1:n  
  128.         if sum(sum(d(:,j)))/m>=0.95  
  129.             d(:,j)=0;  
  130.         end  
  131.     end  
  132.     % 对以上处理后的图像再处理  
  133.     % 在左边 1/2 处找连续两条黑线,认为该黑线左边为背景;在右边 1/2 处找连续两条黑线,认为该黑线右边是背景  
  134.     % 左边 1/2  
  135.     jj=0;  
  136.     for j=1:round(n/2)  
  137.         if sum(sum(d(:,[j:j+0])))==0  
  138.             jj=j;  
  139.         end  
  140.     end  
  141.     d(:,[1:jj])=0;  
  142.     % 右边 1/2  
  143.     for j=n:-1:round(n/2)  
  144.         if sum(sum(d(:,[j-0:j])))==0  
  145.             jj=j;  
  146.         end  
  147.     end  
  148.     d(:,[jj:n])=0;  
  149. end  
  150. imwrite(d,'5.统一成黑底白字.jpg');  
  151. figure(1),subplot(3,2,5),imshow(d),title('5.背景色统一成黑底白字')  
  152. figure(2),subplot(5,1,1),imshow(d),title('5.黑底白字的二值车牌图像')  
  153.   
  154. % 去除上下边框  
  155. % STEP 1  黑白跳变小于阈值则被视为背景  
  156. % 上面 2/5  
  157. y1=10;  % y1: 跳变阈值  
  158. for i=1:round(m/5*2)  
  159.     count=0;jump=0;temp=0;  
  160.     for j=1:n  
  161.         if d(i,j)==1  
  162.             temp=1;  
  163.         else  
  164.             temp=0;  
  165.         end  
  166.         if temp==jump  
  167.             count=count;  
  168.         else  
  169.             count=count+1;  
  170.         end  
  171.         jump=temp;  
  172.     end  
  173.     if count<y1  
  174.         d(i,:)=0;  
  175.     end  
  176. end  
  177. % 下面 2/5  
  178. for i=3*round(m/5):m  
  179.     count=0;jump=0;temp=0;  
  180.     for j=1:n  
  181.         if d(i,j)==1  
  182.             temp=1;  
  183.         else  
  184.             temp=0;  
  185.         end  
  186.         if temp==jump  
  187.             count=count;  
  188.         else  
  189.             count=count+1;  
  190.         end  
  191.         jump=temp;  
  192.     end  
  193.     if count<y1  
  194.         d(i,:)=0;  
  195.     end  
  196. end  
  197. imwrite(d,'6.黑白跳变小于某阈值的行则被视为背景.jpg');  
  198. figure(2),subplot(5,1,2),imshow(d),title('6.黑白跳变小于某阈值的行则被视为背景')  
  199.   
  200. % STEP 2  单行白色大于阈值则被认为是背景,考虑 FLAG 的值  
  201. % 上面 2/5  
  202. y2=round(n/2); % y2: 阈值  
  203. for i=1:round(m/5*2)  
  204.     if flag==0  
  205.         temp=sum(d(i,:));y2=round(n/2);  
  206.         if temp>y2  
  207.             d(i,:)=0;  
  208.         end  
  209.     else  
  210.         temp=m-sum(d(i,:));y2=m-round(n/2);  
  211.         if temp<y2  
  212.             d(i,:)=0;  
  213.         end  
  214.     end  
  215. end  
  216. % 下面 2/5  
  217. for i=round(3*m/5):m  
  218.     if flag==0  
  219.         temp=sum(d(i,:));y2=round(n/2);  
  220.         if temp>y2  
  221.             d(i,:)=0;  
  222.         end  
  223.     else  
  224.         temp=m-sum(d(i,:));y2=m-round(n/2);  
  225.         if temp<y2  
  226.             d(i,:)=0;  
  227.         end  
  228.     end  
  229. end  
  230. imwrite(d,'7.单行白色点总数大于某阈值则该行被认为是背景.jpg');  
  231. figure(2),subplot(5,1,3),imshow(d),title('7.单行白色点总数大于某阈值则该行被认为是背景')  
  232. % STEP 3  单行白色大于阈值则被认为是背景,考虑 FLAG 的值  
  233. % 上面 2/5  
  234. y2=round(n/2); % y2: 阈值  
  235. for i=1:round(m/5*2)  
  236.     if flag==0  
  237.         temp=sum(d(i,:));y2=round(n/2);  
  238.         if temp>y2  
  239.             d(i,:)=0;  
  240.         end  
  241.     else  
  242.         temp=m-sum(d(i,:));y2=m-round(n/2);  
  243.         if temp<y2  
  244.             d(i,:)=0;  
  245.         end  
  246.     end  
  247. end  
  248. % 下面 2/5  
  249. for i=round(3*m/5):m  
  250.     if flag==0  
  251.         temp=sum(d(i,:));y2=round(n/2);  
  252.         if temp>y2  
  253.             d(i,:)=0;  
  254.         end  
  255.     else  
  256.         temp=m-sum(d(i,:));y2=m-round(n/2);  
  257.         if temp<y2  
  258.             d(i,:)=0;  
  259.         end  
  260.     end  
  261. end  
  262. imwrite(d,'8.单行白色点总数大于某阈值则该行被认为是背景.jpg');  
  263. figure(2),subplot(5,1,4),imshow(d),title('8.单行白色点总数大于某阈值则该行被认为是背景')  
  264. %  STEP 4 做完以上处理后,上边 1/2 中搜索连续两条黑线,认为该黑线以上为背景;  
  265. % 在下边 1/2 中搜索连续两条黑线,认为该黑线以下为背景  
  266. % 上边 1/2  
  267. for i=1:round(m/2)  
  268.     if sum(sum(d([i,i+0],:)))==0  
  269.         ii=i;  
  270.     end  
  271. end  
  272. d([1:ii],:)=0;  
  273. % 下边 1/2  
  274. for i=m:-1:round(m/2)  
  275.     if sum(sum(d([i-0:i],:)))==0  
  276.         ii=i;  
  277.     end  
  278. end  
  279. d([ii:m],:)=0;  
  280. imwrite(d,'9.搜索上下两条黑线后的结果.jpg');  
  281. figure(2),subplot(5,1,5),imshow(d),title('9.搜索上下两条黑线后的结果')  
  282.   
  283. % 反旋转  
  284. if rotate==1  
  285.     d=imrotate(d,-abs(x-90));  
  286. end  
  287. imwrite(d,'10.反旋转去毛刺后.jpg');  
  288. figure(3),subplot(3,2,1),imshow(d),title('10.反旋转去毛刺后')  
  289. % 切割处最小范围  
  290. d=qiege(d);e=d;  
  291. imwrite(d,'11.切割处最小范围.jpg');  
  292. figure(3),subplot(3,2,2),imshow(d),title('11.切割处最小范围')  
  293. figure(3),subplot(3,2,3),imshow(d),title('11.均值滤波前')  
  294.   
  295. % 滤波  
  296. h=fspecial('average',3);  
  297. d=im2bw(round(filter2(h,d)));  
  298. imwrite(d,'12.均值滤波后.jpg');  
  299. figure(3),subplot(3,2,4),imshow(d),title('12.均值滤波后')  
  300.   
  301. % 某些图像进行操作  
  302. % 膨胀或腐蚀  
  303. % se=strel('square',3);  % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀  
  304. % 'line'/'diamond'/'ball'...  
  305. se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵  
  306. [m,n]=size(d);  
  307. if bwarea(d)/m/n>=0.365  
  308.     d=imerode(d,se);  
  309. elseif bwarea(d)/m/n<=0.235  
  310.     d=imdilate(d,se);  
  311. end  
  312. imwrite(d,'13.膨胀或腐蚀处理后.jpg');  
  313. figure(3),subplot(3,2,5),imshow(d),title('13.膨胀或腐蚀处理后')  
  314.   
  315. % 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割  
  316. d=qiege(d);  
  317. [m,n]=size(d);  
  318. figure,subplot(2,1,1),imshow(d),title(n)  
  319. k1=1;k2=1;s=sum(d);j=1;  
  320. while j~=n  
  321.     while s(j)==0  
  322.         j=j+1;  
  323.     end  
  324.     k1=j;  
  325.     while s(j)~=0 && j<=n-1  
  326.         j=j+1;  
  327.     end  
  328.     k2=j-1;  
  329.     if k2-k1>=round(n/6.5)  
  330.         [val,num]=min(sum(d(:,[k1+5:k2-5])));  
  331.         d(:,k1+num+5)=0;  % 分割  
  332.     end  
  333. end  
  334. % 再切割  
  335. d=qiege(d);  
  336. % 切割出 7 个字符  
  337. y1=10;y2=0.25;flag=0;word1=[];  
  338. while flag==0  
  339.     [m,n]=size(d);  
  340.     left=1;wide=0;  
  341.     while sum(d(:,wide+1))~=0  
  342.         wide=wide+1;  
  343.     end  
  344.     if wide<y1   % 认为是左侧干扰  
  345.         d(:,[1:wide])=0;  
  346.         d=qiege(d);  
  347.     else  
  348.         temp=qiege(imcrop(d,[1 1 wide m]));  
  349.         [m,n]=size(temp);  
  350.         all=sum(sum(temp));  
  351.         two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));  
  352.         if two_thirds/all>y2  
  353.             flag=1;word1=temp;   % WORD 1  
  354.         end  
  355.         d(:,[1:wide])=0;d=qiege(d);  
  356.     end  
  357. end  
  358. % 分割出第二个字符  
  359. [word2,d]=getword(d);  
  360. % 分割出第三个字符  
  361. [word3,d]=getword(d);  
  362. % 分割出第四个字符  
  363. [word4,d]=getword(d);  
  364. % 分割出第五个字符  
  365. [word5,d]=getword(d);  
  366. % 分割出第六个字符  
  367. [word6,d]=getword(d);  
  368. % 分割出第七个字符  
  369. [word7,d]=getword(d);  
  370. subplot(5,7,1),imshow(word1),title('1');  
  371. subplot(5,7,2),imshow(word2),title('2');  
  372. subplot(5,7,3),imshow(word3),title('3');  
  373. subplot(5,7,4),imshow(word4),title('4');  
  374. subplot(5,7,5),imshow(word5),title('5');  
  375. subplot(5,7,6),imshow(word6),title('6');  
  376. subplot(5,7,7),imshow(word7),title('7');  
  377. [m,n]=size(word1);  
  378. % 商用系统程序中归一化大小为 32*16,此处演示  
  379. word1=imresize(word1,[40 20]);  
  380. word2=wordprocess(word2);  
  381. word3=wordprocess(word3);  
  382. word4=wordprocess(word4);  
  383. word5=wordprocess(word5);  
  384. word6=wordprocess(word6);  
  385. word7=wordprocess(word7);  
  386.   
  387.   
  388. subplot(5,7,15),imshow(word1),title('1');  
  389. subplot(5,7,16),imshow(word2),title('2');  
  390. subplot(5,7,17),imshow(word3),title('3');  
  391. subplot(5,7,18),imshow(word4),title('4');  
  392. subplot(5,7,19),imshow(word5),title('5');  
  393. subplot(5,7,20),imshow(word6),title('6');  
  394. subplot(5,7,21),imshow(word7),title('7');  
  395. imwrite(word1,'14.字符分割归一化后 1.jpg');  
  396. imwrite(word2,'14.字符分割归一化后 2.jpg');  
  397. imwrite(word3,'14.字符分割归一化后 3.jpg');  
  398. imwrite(word4,'14.字符分割归一化后 4.jpg');  
  399. imwrite(word5,'14.字符分割归一化后 5.jpg');  
  400. imwrite(word6,'14.字符分割归一化后 6.jpg');  
  401. imwrite(word7,'14.字符分割归一化后 7.jpg');  
  402.   
  403.   
  404. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  405. clc  
  406. word='';  
  407. word(1)=wordrec(word1);  
  408. word(2)=wordrec(word2);  
  409. word(3)=wordrec(word3);  
  410. word(4)=wordrec(word4);  
  411. word(5)=wordrec(word5);  
  412. word(6)=wordrec(word6);  
  413. word(7)=wordrec(word7);  
  414. clc  
  415. save I  'word1' 'word2' 'word3' 'word4' 'word5' 'word6' 'word7'  
  416. clear  
  417. load I;  
  418. load bp net;  
  419. word='';  
  420. word(1)=wordrec(word1);  
  421. word(2)=wordrec(word2);  
  422. word(3)=wordrec(word3);  
  423. word(4)=wordrec(word4);  
  424. word(5)=wordrec(word5);  
  425. word(6)=wordrec(word6);  
  426. word(7)=wordrec(word7);  
  427. word=strcat('识别结果:',word);  
  428. subplot(5,3,14),imshow([]),title(word,'fontsize',24)  
  429.   
  430. % 该子程序用于切割出最小范围  
  431. function e=qiege(d)  
  432. [m,n]=size(d);  
  433. top=1;bottom=m;left=1;right=n;   % init  
  434. while sum(d(top,:))==0 && top<=m  
  435.     top=top+1;  
  436. end  
  437. while sum(d(bottom,:))==0 && bottom>=1  
  438.     bottom=bottom-1;  
  439. end  
  440. while sum(d(:,left))==0 && left<=n  
  441.     left=left+1;  
  442. end  
  443. while sum(d(:,right))==0 && right>=1  
  444.     right=right-1;  
  445. end  
  446. dd=right-left;  
  447. hh=bottom-top;  
  448. e=imcrop(d,[left top dd hh]);  
  449.   
  450. % 分割字符  
  451. function [word,result]=getword(d)  
  452. word=[];flag=0;y1=8;y2=0.5;  
  453. % if d==[]  
  454. %   word=[];  
  455. % else  
  456.     while flag==0  
  457.         [m,n]=size(d);  
  458.         wide=0;  
  459.         while sum(d(:,wide+1))~=0 && wide<=n-2  
  460.             wide=wide+1;  
  461.         end  
  462.         temp=qiege(imcrop(d,[1 1 wide m]));  
  463.         [m1,n1]=size(temp);  
  464.         if wide<y1 && n1/m1>y2  
  465.             d(:,[1:wide])=0;  
  466.             if sum(sum(d))~=0  
  467.                 d=qiege(d);  % 切割出最小范围  
  468.             else word=[];flag=1;  
  469.             end  
  470.         else  
  471.             word=qiege(imcrop(d,[1 1 wide m]));  
  472.             d(:,[1:wide])=0;  
  473.             if sum(sum(d))~=0;  
  474.                 d=qiege(d);flag=1;  
  475.             else d=[];  
  476.             end  
  477.         end  
  478.     end  
  479. %end  
  480.           result=d;  
  481.         
  482. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  483. % 该子程序用于字符归一化处理  
  484. function d=wordprocess(d)  
  485. [m,n]=size(d);  
  486. %top 1/3, bottom 1/3  
  487. for i=1:round(m/3)  
  488.     if sum(sum(d([i:i+0],:)))==0  
  489.         ii=i;d([1:ii],:)=0;  
  490.     end  
  491. end  
  492. for i=m:-1:2*round(m/3)  
  493.     if sum(sum(d([i-0:i],:)))==0  
  494.         ii=i;d([ii:m],:)=0;  
  495.     end  
  496. end  
  497. if n~=1  
  498.     d=qiege(d);  
  499. end  
  500. % d=..这个可以通过训练过程设置大小  
  501. % d=imresize(d,[32 16]); % 商用系统程序中归一划大小为:32*16  
  502. d=imresize(d,[40 20]);   
  503.   
  504.   
  505. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  506. % 编号:A-Z 分别为 1-26; 0-9 分别为 27-36;  
  507. % 京  津  沪  渝  港  澳  吉  辽  鲁  豫  冀  鄂  湘  晋  青  皖  苏  
  508. % 赣  浙  闽  粤  琼  台  陕  甘  云  川  贵  黑  藏  蒙  桂  新  宁  
  509. % 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59   
  510. % 60 61 62 63 64 65 66 67 68 69 70  
  511. % 使用 BP 网络  
  512. function word=wordrec(xx)  
  513. % clear  
  514. % clc  
  515. load bp net;  
  516. xx=im2bw(xx);xx=double(xx(:));  % 使用阈值将图像转换为二进制图像  
  517. a=sim(net,xx);  % 归一划为: 32*16,则 xx=512*1;  
  518. [val,num]=max(a);  
  519. if num<=26  
  520.     word=char(double('A')+num-1);  
  521. elseif num<=36  
  522.     word=char(double('0')+num-1-26);  
  523. else  
  524.     switch num  
  525.         case 37  
  526.             word='京';  
  527.         case 38  
  528.             word='津';  
  529.         case 39  
  530.             word='沪';  
  531.         case 40  
  532.             word='渝';  
  533.         case 41  
  534.             word='港';  
  535.         case 42  
  536.             word='澳';  
  537.         case 43  
  538.             word='吉';  
  539.         case 44  
  540.             word='辽';  
  541.         case 45  
  542.             word='鲁';  
  543.         case 46  
  544.             word='豫';  
  545.         case 47  
  546.             word='冀';  
  547.         case 48  
  548.             word='鄂';  
  549.         case 49  
  550.             word='湘';  
  551.         case 50  
  552.             word='晋';  
  553.         case 51  
  554.             word='青';  
  555.         case 52  
  556.             word='皖';  
  557.         case 53  
  558.             word='苏';  
  559.         case 54  
  560.             word='赣';  
  561.         case 55  
  562.             word='浙';  
  563.         case 56  
  564.             word='闽';  
  565.         case 57  
  566.             word='粤';  
  567.         case 58  
  568.             word='琼';  
  569.         case 59  
  570.             word='台';  
  571.         case 60  
  572.             word='陕';  
  573.         case 61  
  574.             word='甘';  
  575.         case 62  
  576.             word='云';  
  577.         case 63  
  578.             word='川';  
  579.         case 64  
  580.             word='贵';  
  581.         case 65  
  582.             word='黑';  
  583.         case 66  
  584.             word='藏';  
  585.         case 67  
  586.             word='蒙';  
  587.         case 68  
  588.             word='桂';  
  589.         case 69  
  590.             word='新';  
  591.         case 70  
  592.             word='宁';  
  593.     end  
  594. end  
  • 18
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值