当前位置:   article > 正文

基于matlab的车牌识别_车牌识别matlab程序

车牌识别matlab程序

20221126 新增 首先说一下这个工程的思路,很多朋友妄想直接拿着工程用,那是不可能的,自己学去叭,我是先将车牌号预处理之后,整个图片干净一点之后,进行每个字符的切割,但是是很投机取巧的方法,是先切好第一个字符,再根据切割坐标,切割下一个字符,直到将所有字符切割好(所以采用你们自己的图片的时候,可能在这一步就出错了,甚至出现好几个字符在一起,就是因为切割原理就是根据字符的宽度来的,请明白这一点),切割完之后,就进行字符和字符模板的匹配,这一步我虽然忘了当时的想法,但确实用的是一种很简单的算法,我当时也查过,有很多很复杂的方法,但确实我不是做这方面的,确实只是为了完成作业而已,所以可能你们切割好了,也可能识别不是很成功。请自己去学习叭!当时就是觉得可以记录一下我的学习过程而已,因为平时自己找资料,很多也是要钱的,所以才建了一个qq群,上传我的一些经验,请需要的朋友自取,但也请尊重别人的劳动成果,注意自己的言论!

------------------------------------------------------------正文开始---------------------------------------------------------

 系统设计

MATLAB中的设计

一个完整的车牌号识别系统要完成从图像采集到字符识别输出,过程相当复杂,基本可以分成硬件部分跟软件部分,硬件部分包括系统触发、图像采集,软件部分包括图像预处理、车牌定位、字符分割、字符识别四大部分,一个车牌识别系统的基本结构如图:

图形预处理:扫描原始图像,并得出其对应的hsv图片

车牌定位:根据hsv算法,对图像像素点进行遍历,取出蓝色部分

字符分割:根据二值图像对字符进行分割

字符识别:根据字符模板,对分割后的字符进行匹配

  1. I=imread('E:\matlab\matlab2016b\exercise\car_find\车牌.jpg'); %读入车牌照片
  2. figure(1);subplot(2,1,1);imshow(I);
  3. title('原图');
  4. %%%%第一步根据hsv色彩定位法定位车牌%%%%
  5. Image=im2double(I); %把图像数据类型转换为double类型
  6. Image=rgb2hsv(Image); %将RGB图像转化为hsv模型,H色相,S饱和度,V亮度
  7. figure(1);subplot(2,1,2);imshow(Image);
  8. title('hsv图');
  9. %%%%%%%%%%进行上下剪切%%%%%%%%%%%
  10. [y,x,~]=size(Image); %得出图片的像素点横纵坐标
  11. Blue_y = zeros(y, 1); %生成一个y*1的零矩阵
  12. p=[0.56 0.71 0.4 1 0.3 1 0]; %蓝色的h s v范围
  13. for i = 1 : y
  14. for j = 1 : x
  15. hij = Image(i, j, 1); %取出每个像素点的H、S、V值
  16. sij = Image(i, j, 2);
  17. vij = Image(i, j, 3);
  18. if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&(vij>=p(5)&&vij<=p(6)) %若像素点的HSV处于蓝色的HSV范围
  19. Blue_y(i, 1) = Blue_y(i, 1) + 1;%统计每行的蓝色像素点数目
  20. end
  21. end
  22. end
  23. [~, MaxY] = max(Blue_y);%得到Blue_y数最大的列数
  24. Th = p(7); %Th=0
  25. PY1 = MaxY; %获取蓝色像素点最多的行号
  26. while ((Blue_y(PY1,1)>Th) && (PY1>0))%找到车牌上边界(将蓝色像素点逐次减一,直至有一个蓝色像素点的地方)
  27. PY1 = PY1 - 1;
  28. end
  29. PY2 = MaxY;
  30. while ((Blue_y(PY2,1)>Th) && (PY2<y))%找到车牌下边界(将蓝色像素点逐次加一,直至上边界只有一个蓝色像素点的地方)
  31. PY2 = PY2 + 1;
  32. end
  33. PY1 = PY1 - 10; %上下边界校正(扩大)
  34. PY2 = PY2 + 10;
  35. if PY1 < 1 %如果图像内容只有车牌,上述校正可能会使得边界值超出合理范围,此处防止边界值超出图像范围
  36. PY1 = 1;
  37. end
  38. if PY2 > y
  39. PY2 = y;
  40. end
  41. It=I(PY1:PY2,:,:);%Y方向获取原图的车牌区域
  42. figure(2);subplot(3,1,1),imshow(It);
  43. title('hsv色彩分割法车牌定位结果');
  44. %%%%%%%%%进行左右剪切%%%%%%%
  45. IY = Image(PY1:PY2, :, :); %对HSV模型图像Image在Y方向进行截取
  46. figure(2);subplot(3,1,2);imshow(IY);
  47. title('HSV模型图像Image在Y方向进行截取');
  48. [y1,x1,z1]=size(IY); %得出HSV模型图像Image在Y方向截取图片的像素点横纵坐标
  49. Blue_x=zeros(1,x1); %生成一个1*x1的零矩阵
  50. for j = 1 : x1
  51. for i = 1 : y1
  52. hij = IY(i, j, 1); %获取每个像素点的HSV
  53. sij = IY(i, j, 2);
  54. vij = IY(i, j, 3);
  55. if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&(vij>=p(5)&&vij<=p(6))%若为蓝色像素点
  56. Blue_x(1, j) = Blue_x(1, j) + 1; %记录每一列蓝色像素数目
  57. end
  58. end
  59. end
  60. PX1=1;PX2=x1;%找到左右边界
  61. while Blue_x(1, PX1)==0
  62. PX1=PX1+1;
  63. end
  64. while Blue_x(1, PX2)==0
  65. PX2=PX2-1;
  66. end
  67. I1=I(PY1:PY2,PX1:PX2,:);%车牌剪裁
  68. figure(2),subplot(3,1,3),imshow(I1),title('hsv色彩分割法车牌定位结果');
  69. I2=rgb2gray(I1); %将图转化为灰度图
  70. figure(3),subplot(3,1,1),imshow(I2),title('灰度图');
  71. %%%%第二步字符分割前的图像处理(对剪切后的车牌进行处理)%%%%
  72. %%%%边界校正%%%%%
  73. [y,x,z]=size(I2);%I2有y行x列
  74. PX1=round(x*5/440);%根据实际车牌比例,将边框部分去除
  75. PX2=x-round(x*5/440);
  76. PY1=round(y*16/350); %140
  77. PY2=y-round(y*16/120);%140
  78. fprintf('校正后 左边界=%d、右边界=%d、上边界=%d、下边界=%d',PX1,PX2,PY1,PY2);
  79. %彩色图像车牌部分截取
  80. dw=I1(PY1:PY2,PX1:PX2,:);%对边界进行截取
  81. figure(3),subplot(3,1,2),imshow(dw),title('边界校正结果');
  82. imwrite(dw,'dw.jpg');%把截取后的彩色图像新创建一张图片,命名为dw
  83. a=imread('dw.jpg');
  84. b=rgb2gray(a);%将截取后的图片变为灰度图
  85. figure(3),subplot(3,1,3),imshow(b),title('边界校正结果灰度图');
  86. imwrite(b,'1.车牌灰度图像.jpg');
  87. g_max=double(max(max(b)));%得出剪裁后灰度图矩阵的最大值,并变成双精度浮点型
  88. g_min=double(min(min(b)));%得出剪裁后灰度图矩阵的最小值,并变成双精度浮点型
  89. T=round((g_max-(g_max-g_min)/2)-20); % T为二值化的阈值,round用于取整(阈值大小可根据实际图像进行更改)
  90. d=(double(b)>=T); % d:二值图像
  91. imwrite(d,'2.车牌二值图像.jpg');
  92. figure(4),subplot(3,1,1),imshow(d),title('二值图像');
  93. %%%%%%第三步滤波%%%%%%%
  94. h=fspecial('average',3);%创建一个二维滤波器,average是类型,3是参数
  95. d=im2bw(round(filter2(h,d)));%filter2进行滤波处理,im2bw使用阈值变换法把灰度图像转换成二值图像
  96. imwrite(d,'4.均值滤波后.jpg');
  97. figure(4),subplot(3,1,2),imshow(d),title('均值滤波后的图像');
  98. %去点处理
  99. [m,n]=size(d);
  100. d(:,round(n*122/430):round(n*137/430))=0;%去除中间的点
  101. d=bwareaopen(d,65);%用于删除二值图像中面积小于一个定值(此处为65)的对象,默认情况下使用8邻域
  102. figure(4),subplot(3,1,3),imshow(d),title('去点处理');
  103. %上下边框处理,找到上下边界处像素值小于20的行,并将整行设为零
  104. s=zeros(1,m);%生成一个1*m的零矩阵
  105. i=1;
  106. while i<=m
  107. s(i)=sum(d(i,:));%是求矩阵的一行和
  108. i=i+1;
  109. end
  110. j=0;c=zeros(1,m);%c矩阵用于记录下边框处像素值小于20的行,用于确定边框与字符间空隙的位置
  111. while j<m
  112. while s(j+1)>20&&j<m-1
  113. j=j+1;
  114. end
  115. if j<round(m*12/140) %如果是上边框
  116. d((1:j),:)=0;
  117. else j>round(m*115/140)%如果是下边框
  118. c(j)=j;%将下边界处理中像素值小于20的行记录下来
  119. d(j,:)=0;
  120. end
  121. j=j+1;
  122. end
  123. jj=round(m/2);%这里是为了找到下边界处理中,被记录下来的最小行(即边框和字符间空隙的上沿),所以从中间开始往下找,直到找到的第一个非零数
  124. while c(jj)==0
  125. jj=jj+1;
  126. end
  127. d((jj:m),:)=0;%将这一行以下皆设为0
  128. d=imcrop(d,[1 1 n jj]); %1 1为顶点坐标 n为宽,jj为高
  129. figure(5),subplot(3,1,1),imshow(d),title('上下边框处理');
  130. imwrite(d,'5.分割前.jpg');
  131. %车牌字符分割
  132. [H,L]=size(d);
  133. w1=0;
  134. while sum(d(:,w1+1))==0 && w1<L %判断出第一个字符的起始位置(因为起始位前面都是黑色 都为0
  135. w1=w1+1;%当前面列和为0时,就将列坐标加一
  136. end
  137. w2=w1;
  138. while sum(d(:,w2+1))~=0 && w2<L %判断出第一个字符的最后位置(因为有字符的地方都是白色 不为0
  139. w2=w2+1;
  140. end
  141. w3=w2;
  142. while (w3-w1)<(L/ 8)%但因为像“川”字,就有中间部分为黑色,故必须让有白色部分的区域大于整个车牌的八等份
  143. w3=w3+1;
  144. end
  145. e1=imcrop(d,[w1 1 w3-w1 H]);%w1 1为顶点坐标 w3-w1为宽,H为高
  146. figure(5),subplot(3,1,2),imshow(e1);
  147. title('第一个字符分割');
  148. d=imcrop(d,[w3 1 L-w3 H]); %1 1为顶点坐标 n为宽,jj为高
  149. figure(5),subplot(3,1,3),imshow(d);
  150. title('分割一个字符后的图片');
  151. % 分割出第二个字符
  152. [H,L]=size(d);
  153. w1=0;
  154. while sum(d(:,w1+1))==0 && w1<L %判断出第一个字符的起始位置(因为起始位前面都是黑色 都为0
  155. w1=w1+1;%当前面列和为0时,就将列坐标加一
  156. end
  157. w2=w1;
  158. while sum(d(:,w2+1))~=0 && w2<L
  159. w2=w2+1;
  160. end
  161. w3=w2;
  162. while (w3-w1)<(L/6)
  163. w3=w3+1;
  164. end
  165. e2=imcrop(d,[w1 1 w3-w1 H]);%w1 1为顶点坐标 w3-w1为宽,H为高
  166. figure(6),subplot(4,1,1),imshow(e2);
  167. title('第二个字符分割');
  168. d=imcrop(d,[w3 1 L-w3 H]); %1 1为顶点坐标 n为宽,jj为高
  169. figure(6),subplot(4,1,2),imshow(d);
  170. title('分割两个字符后的图片');
  171. % 分割出第三个字符
  172. [H,L]=size(d);
  173. w1=0;
  174. while sum(d(:,w1+1))==0 && w1<L %判断出第一个字符的起始位置(因为起始位前面都是黑色 都为0
  175. w1=w1+1;%当前面列和为0时,就将列坐标加一
  176. end
  177. w2=w1;
  178. while sum(d(:,w2+1))~=0 && w2<L %判断出第一个字符的最后位置(因为有字符的地方都是白色 不为0
  179. w2=w2+1;
  180. end
  181. w3=w2;
  182. while (w3-w1)<(L/8)
  183. w3=w3+1;
  184. end
  185. e3=imcrop(d,[w1 1 w3-w1 H]);%w1 1为顶点坐标 w3-w1为宽,H为高
  186. figure(6),subplot(4,1,3),imshow(e3);
  187. title('第三个字符分割');
  188. d=imcrop(d,[w3 1 L-w3 H]); %1 1为顶点坐标 n为宽,jj为高
  189. figure(6),subplot(4,1,4),imshow(d);
  190. title('分割三个字符后的图片');
  191. % 分割出第四个字符
  192. [H,L]=size(d);
  193. w1=0;
  194. while sum(d(:,w1+1))==0 && w1<L %判断出第一个字符的起始位置(因为起始位前面都是黑色 都为0
  195. w1=w1+1;%当前面列和为0时,就将列坐标加一
  196. end
  197. w2=w1;
  198. while sum(d(:,w2+1))~=0 && w2<L
  199. w2=w2+1;
  200. end
  201. w3=w2;
  202. while (w3-w1)<(L/4)
  203. w3=w3+1;
  204. end
  205. e4=imcrop(d,[w1 1 w3-w1 H]);%w1 1为顶点坐标 w3-w1为宽,H为高
  206. figure(7),subplot(4,1,1),imshow(e4);
  207. title('第四个字符分割');
  208. d=imcrop(d,[w3 1 L-w3 H]); %1 1为顶点坐标 n为宽,jj为高
  209. figure(7),subplot(4,1,2),imshow(d);
  210. title('分割四个字符后的图片');
  211. % 分割出第五个字符
  212. [H,L]=size(d);
  213. w1=0;
  214. while sum(d(:,w1+1))==0 && w1<L %判断出第一个字符的起始位置(因为起始位前面都是黑色 都为0
  215. w1=w1+1;%当前面列和为0时,就将列坐标加一
  216. end
  217. w2=w1;
  218. while sum(d(:,w2+1))~=0 && w2<L %判断出第一个字符的最后位置(因为有字符的地方都是白色 不为0
  219. w2=w2+1;
  220. end
  221. w3=w2;
  222. while (w3-w1)<(L/3)
  223. w3=w3+1;
  224. end
  225. e5=imcrop(d,[w1 1 w3-w1 H]);%w1 1为顶点坐标 w3-w1为宽,H为高
  226. figure(7),subplot(4,1,3),imshow(e5);
  227. title('第五个字符分割');
  228. d=imcrop(d,[w3 1 L-w3 H]); %1 1为顶点坐标 n为宽,jj为高
  229. figure(7),subplot(4,1,4),imshow(d);
  230. title('分割五个字符后的图片');
  231. % 分割出第六个字符
  232. [H,L]=size(d);
  233. w1=0;
  234. while sum(d(:,w1+1))==0 && w1<L %判断出第一个字符的起始位置(因为起始位前面都是黑色 都为0
  235. w1=w1+1;%当前面列和为0时,就将列坐标加一
  236. end
  237. w2=w1;
  238. while sum(d(:,w2+1))~=0 && w2<L
  239. w2=w2+1;
  240. end
  241. w3=w2;
  242. while (w3-w1)<(L/2)
  243. w3=w3+1;
  244. end
  245. e6=imcrop(d,[w1 1 w3-w1 H]);%w1 1为顶点坐标 w3-w1为宽,H为高
  246. figure(8),subplot(4,1,1),imshow(e6);
  247. title('第六个字符分割');
  248. e7=imcrop(d,[w3 1 L-w3 H]); %1 1为顶点坐标 n为宽,jj为高
  249. figure(8),subplot(4,1,2),imshow(e7);
  250. title('第七个字符分割');
  251. %归一化大小为 40*20
  252. e1=imresize(e1,[40 20]);
  253. e2=imresize(e2,[40 20]);
  254. e3=imresize(e3,[40 20]);
  255. e4=imresize(e4,[40 20]);
  256. e5=imresize(e5,[40 20]);
  257. e6=imresize(e6,[40 20]);
  258. e7=imresize(e7,[40 20]);
  259. %将切割下来短的字符保存为图片
  260. imwrite(e1,'1.jpg');
  261. imwrite(e2,'2.jpg');
  262. imwrite(e3,'3.jpg');
  263. imwrite(e4,'4.jpg');
  264. imwrite(e5,'5.jpg');
  265. imwrite(e6,'6.jpg');
  266. imwrite(e7,'7.jpg');
  267. chars={e1,e2,e3,e4,e5,e6,e7};
  268. character=['藏','川','鄂','甘','赣','桂','贵','黑','沪','吉','冀','津','晋','京','辽','鲁','蒙','闽','宁','青','琼','陕','苏','皖','湘','新','渝','豫','粤','云','浙'];
  269. numberAlphabet=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','K','M','N','L','S','W','J','N','U','Q'];
  270. result=[];
  271. index=ones(1,7);
  272. Num1=length(character);
  273. Num2=length(numberAlphabet);
  274. error=zeros(1,Num1);
  275. error1=zeros(1,Num1);
  276. error2=zeros(1,Num1);error3=zeros(1,Num1);error4=zeros(1,Num1);
  277. Error=zeros(1,Num2);
  278. for i=1:7
  279. e=(chars(i));
  280. e=cell2mat(e);%转换为二值型
  281. g_max=double(max(max(e)));
  282. g_min=double(min(min(e)));
  283. T=round(g_max-(g_max-g_min)/2); % T为二值化的阈值
  284. e=(double(e)>=T); % SegBw2切割下来的字符的二值图像
  285. % [count1,I1] = GetRgbHist(e);
  286. % E1=imcrop(e,[1 1 5 20]); %1 1为顶点坐标 n为宽,jj为高
  287. % E2=imcrop(e,[5 1 5 20]);
  288. % E3=imcrop(e,[10 1 5 20]);
  289. % E4=imcrop(e,[15 1 5 20]);
  290. % E5=imcrop(e,[1 20 5 40]); %1 1为顶点坐标 n为宽,jj为高
  291. % E6=imcrop(e,[5 20 5 40]);
  292. % E7=imcrop(e,[10 20 5 40]);
  293. % E8=imcrop(e,[15 20 5 40]);
  294. if i==1
  295. for j=1:Num1
  296. fname=strcat('标准车牌字符模板\',character(j),'.jpg');%获取模板文件名
  297. model=imread(fname);%读取模板图片
  298. model=im2bw(model);%转为二值图像im2bw
  299. model=imresize(model,[40 20]);%规整大小
  300. g_max=double(max(max(model)));
  301. g_min=double(min(min(model)));
  302. T=round(g_max-(g_max-g_min)/2); % T为二值化的阈值
  303. model=(double(model)>=T); % SegBw2切割下来的字符的二值图像
  304. % [count2,I2] = GetRgbHist(model);
  305. %
  306. % error(j) = imsimilar(count1,count2,2);
  307. % M1=imcrop(model,[1 1 5 20]); %1 1为顶点坐标 n为宽,jj为高
  308. % M2=imcrop(model,[5 1 5 20]);
  309. % M3=imcrop(model,[10 1 5 20]);
  310. % M4=imcrop(model,[15 1 5 20]);
  311. % M5=imcrop(model,[1 20 5 40]); %1 1为顶点坐标 n为宽,jj为高
  312. % M6=imcrop(model,[5 20 5 40]);
  313. % M7=imcrop(model,[10 20 5 40]);
  314. % M8=imcrop(model,[15 20 5 40]);
  315. % error1(j)=sum(sum(abs(E1-M1)));
  316. % error2(j)=sum(sum(abs(E2-M2)));
  317. % error3(j)=sum(sum(abs(E3-M3)));
  318. % error4(j)=sum(sum(abs(E4-M4)));
  319. % error5(j)=sum(sum(abs(E5-M5)));
  320. % error6(j)=sum(sum(abs(E6-M6)));
  321. % error7(j)=sum(sum(abs(E7-M7)));
  322. % error8(j)=sum(sum(abs(E8-M8)));
  323. % % error1(j)=abs((corr2(E1,M1))-1);
  324. % % error2(j)=abs((corr2(E2,M2))-1);
  325. % % error3(j)=abs((corr2(E3,M3))-1);
  326. % % error4(j)=abs((corr2(E4,M4))-1);
  327. % error(j)=0.05*error1(j)+0.2*error2(j)+0.2*error3(j)+0.05*error4(j)+0.2*error6(j)+0.2*error7(j)+0.05*error7(j)+0.05*error8(j);
  328. error(j)=sum(sum(abs(e-model)));%计算当前图片与模板图差值
  329. % error(j)=abs((corr2(e,model))-1);
  330. end
  331. best=min(error);%差值最小的作为匹配结果保存
  332. index(i)=find(error==best);%获取匹配模板索引,找到error中等于best值的位置
  333. result=character(index(i));%输出匹配结果字符
  334. else
  335. for j=1:Num2
  336. fname=strcat('标准车牌字符模板\',numberAlphabet(j),'.jpg');
  337. model=imread(fname);
  338. model=im2bw(model);
  339. model=imresize(model,[40 20]);%规整大小
  340. g_max=double(max(max(model)));
  341. g_min=double(min(min(model)));
  342. T=round(g_max-(g_max-g_min)/2); % T为二值化的阈值
  343. model=(double(model)>=T); % SegBw2切割下来的字符的二值图像
  344. Error(j)=sum(sum(abs(e-model)));
  345. % Error(j)=abs((corr2(e,model))-1);
  346. end
  347. best=min(Error);
  348. index(i)=find(Error==best);
  349. result=[result,numberAlphabet(index(i))];
  350. end
  351. end
  352. % %%%%字符识别%%%%
  353. % %建立自动识别字符代码表
  354. % liccode=char(['0':'9' 'A':'H' 'J':'N' 'P':'Z' '藏川鄂甘赣桂贵黑沪吉冀津晋京辽鲁蒙闽宁青琼陕苏皖湘新渝豫粤云浙']); %建立自动识别字符代码表
  355. % SubBw2=zeros(40,20);
  356. % l=1;
  357. % for I=1:7
  358. % ii=int2str(I);%将整形变成字符串
  359. % t=imread([ii,'.jpg']);
  360. % SegBw2=imresize(t,[40 20],'nearest');
  361. % %进行二值化,方便比较
  362. % g_max=double(max(max(SegBw2)));
  363. % g_min=double(min(min(SegBw2)));
  364. % T=round(g_max-(g_max-g_min)/2); % T为二值化的阈值
  365. % SegBw2=(double(SegBw2)>=T); % SegBw2切割下来的字符的二值图像
  366. %
  367. % if l==1 %第一位汉字识别
  368. % kmin=35;
  369. % kmax=65;
  370. % elseif l==2 %第二位 A~Z 字母识别
  371. % kmin=11;
  372. % kmax=34;
  373. % else l>=3; %第三位以后是字母或数字识别
  374. % kmin=1;
  375. % kmax=34;
  376. %
  377. % end
  378. %
  379. % %在每一位对应区间按顺序提取字符模板
  380. % for k2=1:65
  381. % fname=strcat('标准车牌字符模板\',liccode(k2),'.jpg');
  382. % SamBw2 = imread(fname);
  383. % SamBw2=im2bw(SamBw2);
  384. % % if(k2~=2)
  385. % % SamBw2=rgb2gray(SamBw2);
  386. % % end
  387. % g_max=double(max(max(SamBw2)));%二值化处理字符模板
  388. % g_min=double(min(min(SamBw2)));
  389. % T=round(g_max-(g_max-g_min)/2); % T为二值化的阈值
  390. % SamBw2=(double(SamBw2)>=T); % SamBw2为字符模板的二值图像
  391. %
  392. % %字符图像与模板进行比较
  393. % a1(k2)=corr2(SegBw2,SamBw2);
  394. % end
  395. %
  396. % A1=a1(kmin:kmax);%将比较结果放入矩阵A1
  397. % MaxA1=max(A1);%找到比较结果最大值
  398. % findc=find(A1==MaxA1);%获取最大值所在位置
  399. % Code(I*2-1)=liccode(findc+kmin-1);
  400. % Code(I*2)=' ';
  401. % I=I+1;%进行下一字符的提取和比较
  402. % end
  403. figure(9),subplot(2,7,1:7),imshow(dw),title('车牌定位结果'),
  404. xlabel({'','车牌切割结果'});
  405. subplot(2,7,8),imshow(e1);
  406. subplot(2,7,9),imshow(e2);
  407. subplot(2,7,10),imshow(e3);
  408. subplot(2,7,11),imshow(e4);
  409. xlabel(['识别结果为: ', result]);
  410. subplot(2,7,12),imshow(e5);
  411. subplot(2,7,13),imshow(e6);
  412. subplot(2,7,14),imshow(e7);

测试结果图如下:

 

不要再问为什么用的同样的程序 同样的图片 也识别不出来了 那么多中文注释 仔细看看叭 上面这些图片结果也不是我编出来的把

工程文件上传至qq群:868412045

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/129566
推荐阅读
相关标签
  

闽ICP备14008679号