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

news2024/10/5 19:17:10

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');
            else
                img1=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');
            end
            app.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 choice
                case '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);%中值滤波1
            img12=medfilt2(img12);%中值滤波2
            app.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) == 0
                    j = j + 1;
                end
                k1 = j;%定位列有字
                while s(j) ~= 0 && j <= n-1
                    j = j + 1;
                end
                k2 = j + 1;%定位到列没字
                if k2 - k1 > round(n / 6.5)%分隔太宽了
                    [val, num] = min(sum(img12(:, [k1+5:k2-5])));
                    img12(:, k1+num+5) = 0;
                end
            end
            [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:7
                ii = 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;
                end
                l = 1;
                for k = kMin : kMax
                    fname = strcat("ZFMB\",liccode(k),'.jpg');  % 根据字符库找到图片模板
                    samBw2 = imread(fname); % 读取模板库中的图片
                    samBw2 = im2bw(samBw2, 0.5);% 图像二值化
                    % 将待识别图片与模板图片做差
                    for i1 = 1:40
                        for j1 = 1:20
                            subBw2(i1, j1) = segBw2(i1, j1) - samBw2(i1 ,j1);
                        end
                    end
                    Dmax = 0;
                    for i2 = 1:40
                        for j2 = 1:20
                            if subBw2(i2, j2) ~= 0
                                Dmax = Dmax + 1;
                            end
                        end
                    end
                    error(l) = Dmax;
                    l = l + 1;
                end
                errorMin = min(error);
                findc = find(error == errorMin);
                Code(num*2 - 1) = liccode(findc(1) + kMin - 1);
                Code(num*2) = ' ';
                num = num + 1;
            end
            delete('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、源代码链接 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新下载:Navicat for MySQL 11软件安装视频教程

软件简介&#xff1a; Navicat for MySQL 是一款强大的 MySQL 数据库管理和开发工具&#xff0c;它为专业开发者提供了一套强大的足够尖端的工具&#xff0c;但对于新用户仍然易于学习。Navicat For Mysql中文网站&#xff1a;http://www.formysql.com/ Navicat for MySQL 基于…

html+CSS+js部分基础运用19

1. 应用动态props传递数据&#xff0c;输出影片的图片、名称和描述等信息【要求使用props】&#xff0c;效果图如下&#xff1a; 2.在页面中定义一个按钮和一行文本&#xff0c;通过单击按钮实现放大文本的功能。【要求使用$emit()】 代码可以截图或者复制黏贴放置在“实验…

Nginx之初识

1.Nginx概述 Nginx是一个高性能的反向代理和Web服务器软件&#xff0c;因其系统资源消耗低、运行稳定且具有高性能的并发处理能力等特性&#xff0c;在互联网企业中得到广泛的应用。 2.Nginx特性 1.访问路由 现今大型网站的请求量早已不是单一Web服务器可以支撑的了。单一入口…

ESP32:FreeRTOS节拍配置(vTaskDelay延时10ms改为1ms)

文章目录 背景方法手动修改sdkconfig通过idf.py menuconfig 背景 在FreeRTOS的默认配置中&#xff0c;任务调度的频率默认是100HZ&#xff0c;因此默认vTaskDelay默认延时是10ms。 FreeRTOS 的系统时钟节拍可以在配置文件 FreeRTOSConfig.h 里面设置&#xff1a;#define confi…

基于改进YOLOv5的小目标检测 | 添加CBAM注意机制 + 更换Neck网络之BiFPN + 增加高分辨率检测头

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本文针对图像中小目标难以检测的问题&#xff0c;提出了一种基于YOLOv5的改进模型。在主干网络中&#xff0c;加入CBAM注意力模块增强网络特征提取能力&#xff1b;在颈部网络部分&#xff0c;使用BiFPN结构替换PANet结构&…

【YOLOv5进阶】——修改网络结构(以C2f模块为例)

一、站在巨人的肩膀上 这里我们借鉴YOLOv8源码&#xff1a; 上期说到&#xff0c;对于网络模块定义详情在common.py这个文件&#xff0c;如Conv、CrossConv、C3f等。本期要修改的需要参考YOLOv8里的C2f模块&#xff0c;它定义在YOLOv8的module文件夹的block.py文件里&#xf…

1900springboot VUE 生态菜园管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE生态菜园管理系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和…

c#未能加载基类System错误 这台计算机上缺少此项目引用的 NuGet 程序包

拷贝代码到另一台计算机运行&#xff0c;打开Form1.cs报错 首先确认package的框架 如果是472&#xff0c;则更换472的框架 打开项目->xx属性&#xff0c;进行修改 如果框架正确&#xff0c;就是未识别到程序包 可以参考&#xff1a; https://www.cnblogs.com/txwtech/p/1…

⌈ 传知代码 ⌋ 【CLIP】文本也能和图像配对

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

Django学习(1)Model

模型 1、Django操作指令 2、Django模型字段类型 3、Django模型字段类型属性 4、Django模型Meta属性

WINUI——Behavior(行为)小结

前言 在使用MVVM进行WINUI或WPF开发时&#xff0c;Command在某些时候并不能满足逻辑与UI分离的要求。这时肯定就需要其它技术的支持&#xff0c;Behavior就是一种。在WPF中是有Behavior直接支持的&#xff0c;转到WINUI后&#xff0c;相对有一些麻烦&#xff0c;于是在此记录之…

Linux网络命令——tcpdump

tcpdump是Linux下的一个网络数据采集分析工具&#xff0c;也就是常说的抓包工具 tcpdump 核心参数 tcpdump [option] [proto] [dir] [type] 例如&#xff1a;$ tcpdump -i eth0 -nn -s0 -v port 80 option 可选参数&#xff1a; -i : 选择要捕获的接口&#xff0c;通常是以太…

NFT 智能合约实战-快速开始(1)NFT发展历史 | NFT合约标准(ERC-721、ERC-1155和ERC-998)介绍

文章目录 NFT 智能合约实战-快速开始(1)NFT发展历史国内NFT市场国内NFT合规性如何获得NFT?如何查询NFT信息?在 OpenSea 上查看我们的 NFT什么是ERC721NFT合约标准ERC-721、ERC-1155和ERC-998 对比ERC721IERC721.sol 接口内容关于合约需要接收 ERC721 资产 onERC721Received…

机器学习笔记 - LoRA:大型语言模型的低秩适应

一、简述 1、模型微调 随着大型语言模型 (LLM) 的规模增加到数千亿,对这些模型进行微调成为一项挑战。传统上,要微调模型,我们需要更新所有模型参数。这也称为完全微调 (FFT) 。下图详细概述了此方法的工作原理。 完全微调FFT 的计算成本和资源需求很大,因为更新每…

超详解——python条件和循环——小白篇

目录 1. 缩进和悬挂else 2. 条件表达式 3. 和循环搭配的else 4. 可调用对象 总结&#xff1a; 1. 缩进和悬挂else 在Python中&#xff0c;代码块是通过缩进来表示的。条件判断和循环结构的代码块需要正确缩进。悬挂else指的是else子句和相应的if或循环在同一级别的缩进。 …

【Python深度学习】——信息量|熵

【Python深度学习】——信息量|熵 假设1. 信息量1.1 含义1.2 信息量的公式: 2. 熵Entropy2. 含义2.2 熵的计算公式:2.3 熵的作用 假设 例子&#xff1a;掷硬币 假设我们有一个公平的硬币。这个硬币有两个面&#xff1a;正面&#xff08;H&#xff09;和反面&#xff08;T&…

C#项目实战

事件 public delegate void NumManipulationHandler(NumEventArgs e); // 基于上面的委托定义事件 public event NumManipulationHandler ChangeNum;public class Program{public static void Main(){NumEvent even new NumEvent(0);even.ChangeNum EventAction.Action;even…

如何在 Windows 11/10/8/7 中恢复已删除的文件

经历文件一键消失&#xff08;无论出于何种原因&#xff09;可能是最大的噩梦之一。即使您自己删除了文件以释放一些空间&#xff0c;有时您最终还是需要一劳永逸地删除的文件。无论您只是想减轻系统存储的负担并让其容纳最新的数据&#xff0c;还是发现它无关紧要&#xff08;…

开源VisualFreebasic中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

算法金 | AI 基石,无处不在的朴素贝叶斯算法

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 历史上&#xff0c;许多杰出人才在他们有生之年默默无闻&#xff0c; 却在逝世后被人们广泛追忆和崇拜。 18世纪的数学家托马斯贝叶斯…