32、matlab:基于模板匹配的车牌识别

2024-06-10 12:20

本文主要是介绍32、matlab:基于模板匹配的车牌识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、准备工作

1)准备材料

车牌字符模板和测试的实验车牌

2)车牌字符模板

数字、字母和省份缩写

3)测试车牌

四张测试车牌 

2、车牌识别实现(已将其嵌入matlab)

1)打开APP

找到APP

找到我的APP双击点开 

 

2)界面介绍

包括:按钮、视图界面和文本框等功能组件

按钮

包含打开图片、清楚图片、退出APP、关于APP、图片预处理、车牌定位、车牌定位处理、文字分割和识别结果

视图界面

初始车牌、预处理车牌、车牌定位和识别结果等

 

3、导入车牌、清除车牌、退出和关于APP按钮功能效果

导入车牌

代码实现

            [filename,pathname]=uigetfile({'*.*';'*.png';'*.jpg';'*.bmp'});%获取图片路径if isequal(filename,0)||isequal(pathname,0)%打开失败提示errordlg('图片为空','错误');app.Lamp_1.Color=('1.00,0.00,0.00');elseimg1=strcat(pathname,filename);%打开并显示图片img1=imread(img1);app.P1=img1;imshow(img1,'Parent',app.UIAxes_1);app.Lamp_1.Color=('0.00,1.00,0.00');app.Lamp_2.Color=('0.00,1.00,0.00');app.Lamp_3.Color=('0.00,1.00,0.00');app.Lamp_4.Color=('0.00,1.00,0.00');app.Lamp_5.Color=('0.00,1.00,0.00');app.Lamp_6.Color=('0.00,1.00,0.00');endapp.EditField_2.Value=('等待预处理');app.EditField_3.Value=('等待定位');

工程效果 

清除车牌

代码实现

im=imread("纯白.png");%清除显示区imshow(im,'Parent',app.UIAxes_1);imshow(im,'Parent',app.UIAxes_2);imshow(im,'Parent',app.UIAxes_3);imshow(im,'Parent',app.UIAxes_4);imshow(im,'Parent',app.UIAxes_5);imshow(im,'Parent',app.UIAxes_6);imshow(im,'Parent',app.UIAxes_7);imshow(im,'Parent',app.UIAxes_8);imshow(im,'Parent',app.UIAxes_9);imshow(im,'Parent',app.UIAxes_10);imshow(im,'Parent',app.UIAxes_11);app.Lamp_1.Color=('1.00,0.00,0.00');app.Lamp_2.Color=('0.00,1.00,0.00');app.Lamp_3.Color=('0.00,1.00,0.00');app.Lamp_4.Color=('0.00,1.00,0.00');app.Lamp_5.Color=('0.00,1.00,0.00');app.Lamp_6.Color=('0.00,1.00,0.00');app.EditField_2.Value='waiting';app.EditField_3.Value='waiting';app.EditField_1.Value='waiting';

工程效果 

 

退出按钮

代码实现

     choice=questdlg('确定关闭吗?','关闭','YES','NO','NO');%是否关闭程序switch choicecase 'YES'delete('1.jpg','2.jpg','3.jpg','4.jpg','5.jpg','6.jpg','7.jpg');delete(app.UIFigure);return;case 'NO'return;end

工程效果 

 

关于APP

代码实现

 msgbox("这是一个车牌自动识别App","对话框",'help');%软件介绍对话框

工程效果 

 

 4、车牌识别过程

图片预处理

代码实现

img2=rgb2gray(app.P1);%灰度处理app.P2=img2;imshow(img2,'Parent',app.UIAxes_2);img3= edge(app.P2, 'roberts', 0.15,'both');%边缘处理app.P3=img3;imshow(img3,'Parent',app.UIAxes_2);app.EditField_2.Value=('完成预处理');app.Lamp_2.Color=('1.00,0.00,0.00');

工程效果 

车牌定位

代码实现

            se=[1,1,1]';%腐蚀处理img4 = imerode(app.P3,se);app.P4=img4;imshow(img4,'Parent',app.UIAxes_3);se1=strel('rectangle',[30,30]);%图像平滑img5=imclose(app.P4, se1);app.P5=img5;imshow(img5,'Parent',app.UIAxes_3);img6= bwareaopen(app.P5, 2200);%移除对象app.P6=img6;imshow(img6,'Parent',app.UIAxes_3);app.EditField_3.Value='完成车牌定位';[img_Y1, img_Y2, img_X1, img_X2]=cj(app.P6);img8 =app.P1(img_Y1:img_Y2,img_X1:img_X2,:);%原图裁剪app.P7=img8;imshow(img8,'Parent',app.UIAxes_3);app.EditField_3.Value='完成裁剪处理';app.Lamp_3.Color=('1.00,0.00,0.00');

 工程效果

定位图处理

代码实现

img9=rgb2gray(app.P7);%灰度app.P8=img9;imshow(img9,'Parent',app.UIAxes_4);img10=histeq(app.P8);%直方图均衡化app.P9=img10;imshow(img10,'Parent',app.UIAxes_4);img11=im2bw(app.P9,0.76);%二值化app.P10=img11;imshow(img11,'Parent',app.UIAxes_4);img12=medfilt2(app.P10);%中值滤波1img12=medfilt2(img12);%中值滤波2app.P11=img12;imshow(img12,'Parent',app.UIAxes_4);img12=fgt(img12);%裁剪app.P12=img12;imshow(img12,'Parent',app.UIAxes_4);app.Lamp_4.Color=('1.00,0.00,0.00');

工程效果 

 

文字分割

代码实现

img12=app.P12;[m,n] = size(img12);s = sum(img12);j = 1;k1 = 1;k2 = 1;while j ~= n%列定位while s(j) == 0j = j + 1;endk1 = j;%定位列有字while s(j) ~= 0 && j <= n-1j = j + 1;endk2 = j + 1;%定位到列没字if k2 - k1 > round(n / 6.5)%分隔太宽了[val, num] = min(sum(img12(:, [k1+5:k2-5])));img12(:, k1+num+5) = 0;endend[word1,img12]=fgzf(img12);%获取字符[word2,img12]=fgzf(img12);[word3,img12]=fgzf(img12);[word4,img12]=fgzf(img12);[word5,img12]=fgzf(img12);[word6,img12]=fgzf(img12);[word7,img12]=fgzf(img12);word1=imresize(word1,[40 20]);%定大小word2=imresize(word2,[40 20]);word3=imresize(word3,[40 20]);word4=imresize(word4,[40 20]);word5=imresize(word5,[40 20]);word6=imresize(word6,[40 20]);word7=imresize(word7,[40 20]);imshow(word1,'Parent',app.UIAxes_5);imshow(word2,'Parent',app.UIAxes_6);imshow(word3,'Parent',app.UIAxes_7);imshow(word4,'Parent',app.UIAxes_8);imshow(word5,'Parent',app.UIAxes_9);imshow(word6,'Parent',app.UIAxes_10);imshow(word7,'Parent',app.UIAxes_11);imwrite(word1,'1.jpg');%存储下来imwrite(word2,'2.jpg');imwrite(word3,'3.jpg');imwrite(word4,'4.jpg');imwrite(word5,'5.jpg');imwrite(word6,'6.jpg');imwrite(word7,'7.jpg');app.Lamp_5.Color=('1.00,0.00,0.00');

工程效果

 

识别结果

代码实现

liccode=char(['0':'9' 'A':'Z' '京辽鲁陕苏豫浙贵闽粤沪川藏鄂赣甘桂黑冀津吉蒙宁青琼晋皖湘新渝']);subBw2 = zeros(40, 20);num = 1;   % 车牌位数for i = 1:7ii = int2str(i);    % 将整型数据转换为字符串型数据word = imread([ii,'.jpg']); % 读取之前分割出的字符的图片segBw2 = imresize(word, [40,20], 'nearest');    % 调整图片的大小segBw2 = im2bw(segBw2, 0.5);    % 图像二值化if i == 1   % 字符第一位为汉字,定位汉字所在字段kMin = 37;kMax = 44;elseif i == 2   % 第二位为英文字母,定位字母所在字段kMin = 11;kMax = 36;elseif i >= 3   % 第三位开始就是数字了,定位数字所在字段kMin = 1;kMax = 36;endl = 1;for k = kMin : kMaxfname = strcat("ZFMB\",liccode(k),'.jpg');  % 根据字符库找到图片模板samBw2 = imread(fname); % 读取模板库中的图片samBw2 = im2bw(samBw2, 0.5);% 图像二值化% 将待识别图片与模板图片做差for i1 = 1:40for j1 = 1:20subBw2(i1, j1) = segBw2(i1, j1) - samBw2(i1 ,j1);endendDmax = 0;for i2 = 1:40for j2 = 1:20if subBw2(i2, j2) ~= 0Dmax = Dmax + 1;endendenderror(l) = Dmax;l = l + 1;enderrorMin = min(error);findc = find(error == errorMin);Code(num*2 - 1) = liccode(findc(1) + kMin - 1);Code(num*2) = ' ';num = num + 1;enddelete('1.jpg','2.jpg','3.jpg','4.jpg','5.jpg','6.jpg','7.jpg');app.EditField_1.Value=(Code);app.Lamp_6.Color=('1.00,0.00,0.00');

工程效果

 

5、车牌识别设计

前界面设计

程序界面 

6、源代码链接 

这篇关于32、matlab:基于模板匹配的车牌识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048153

相关文章

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的