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、源代码链接 

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

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

相关文章

【网络安全的神秘世界】web应用程序安全与风险

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 第一章&#xff1a;web应用程序安全与风险 web攻击基础知识 1、什么是web应用攻击 web攻击的本质&#xff0c;就是通过http协议篡改应用程序&#xff0…

c#自定义ORM框架-实体类扩展属性

步骤一、建立扩展属性类 实体类扩展属性要继承Attribute基类完成 步骤二、创建实体类并引用扩展实体类属性 Attributes属性定义&#xff0c;主要标明表名和主键名字 /// <summary> /// 表名 /// </summary> [AttributeUsage(AttributeTargets.Class)] [System.S…

蓝牙安全入门——两道CTF题目复现

文章目录 蓝牙安全入门题目 low_energy_crypto获取私钥解密 题目 蓝牙钥匙的春天配对过程配对方法密钥分发数据加密安全漏洞和保护实际应用实际应用 蓝牙安全入门 &#x1f680;&#x1f680;最近一直对车联网比较感兴趣&#xff0c;但是面试官说我有些技术栈缺失&#xff0c;所…

html5实现个人网站源码

文章目录 1.设计来源1.1 网站首页页面1.2 个人工具页面1.3 个人日志页面1.4 个人相册页面1.5 给我留言页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/139564407 ht…

Golang | Leetcode Golang题解之第141题环形链表

题目&#xff1a; 题解&#xff1a; func hasCycle(head *ListNode) bool {if head nil || head.Next nil {return false}slow, fast : head, head.Nextfor fast ! slow {if fast nil || fast.Next nil {return false}slow slow.Nextfast fast.Next.Next}return true }

unity到小游戏instantGame(流程演示,非内容制作 亲测可用)

unity到小游戏instantGame&#xff08;开发流程演示&#xff0c;非内容制作 亲测可用&#xff09; 写在前面直接 写在前面 instantGame 后妈级教学&#xff0c;主打一个填自己的坑&#xff0c;有问题下方评论交流 根据此教程使用后的一点心得记录和可能出现的问题补充&#xf…

设计随笔 ---- ADR4525 篇

ADR4525一颗超低噪声、高精度2.5V基准电压源&#xff1b; Fluke 17B准确度指标&#xff1a; ADR4525指标&#xff1a; Fluke 17B测试结果&#xff1a; 2.5V的基准&#xff0c;输出只有2.477V&#xff0c;其实这么高精度的电压基准用3位半的万用表来测试本身就是一个错误&#…

如何获取MySQL中表的大小?(官方校正版)

与大多数关系数据库一样&#xff0c;MySQL 提供了有关数据库本身的有用元数据。虽然大多数其他数据库将此信息称为 catalog&#xff0c; 但MySQL 官方文档INFORMATION_SCHEMA 将元数据 称为 tables。 目录 1 列出单个数据库中的单表大小 2 列出所有数据库中的所有表大小 以下…

【C语言】宏详解(下卷)

前言 紧接上卷&#xff0c;我们继续来了解宏。 宏替换的规则 1.在调用宏时&#xff0c;首先对参数进行检查&#xff0c;看看是否包含任何由#define定义的符号。如果是&#xff0c;它们首先被替换。 2.替换文本随后被插入到程序中原来文本的位置。对于宏&#xff0c;参数名被他…

Matlab 2024a 建模基础知识全面指南

一、Matlab简介 1. Matlab是什么&#xff1f; Matlab&#xff08;Matrix Laboratory&#xff09;是由MathWorks公司开发的一个高性能的数值计算环境和编程语言。它以其强大的矩阵运算能力、丰富的工具箱和便捷的数据可视化功能而闻名&#xff0c;广泛应用于科学研究、工程模拟…

23.汽水兑奖

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动&#xff0c;旨在激发青少年对学习人工智能与算法设计的热情与兴趣&#xff0c;提升青少年科学素养&#xff0c;引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/106 题目描…

Elasticsearch:Open Crawler 发布技术预览版

作者&#xff1a;来自 Elastic Navarone Feekery 多年来&#xff0c;Elastic 已经经历了几次 Crawler 迭代。最初是 Swiftype 的 Site Search&#xff0c;后来发展成为 App Search Crawler&#xff0c;最近又发展成为 Elastic Crawler。这些 Crawler 功能丰富&#xff0c;允许以…

鞠小云张霖浩闪耀北京广播电视台春晚发布会,豪门姐弟感爆棚

昨日&#xff0c;2025年北京广播电视台“追梦春晚”全国海选发布会在杭州举行&#xff0c;中国内地青年女演员鞠小云同人气幕后张霖浩&#xff0c;受主办方盛情邀请出席本次活动。从现场流露出的照片中可以看出&#xff0c;鞠小云一袭白色长裙灵动温婉素雅&#xff0c;而张霖浩…

27.机会成本

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/677 题目描述 明天有 𝑛n 门考试,今晚只…

C++——计算不同的非空子串个数

计算不同的非空子串 计算方法 这道题是我在BCSP-X小高组的题目中发现的一道 没事闲的就写了代码和思路&#xff1a; 代码 #include <iostream> #include <vector> #include <string> #include <algorithm>using namespace std;// 用于存储后缀数…

[职场] 缺点范文 #知识分享#经验分享#媒体

缺点范文 回答示范1&#xff1a; 我的公开演讲能力比较差&#xff0c;在公共场合讲话的时候我会感到紧张&#xff0c;不过谈论我熟悉的领域我会比较放松。所以当我需要做公开发言的时候&#xff0c;我必须要准备得很充分。我确实羡慕那些无论什么话题都能够高谈阔论的人。 回…

Docker与Docker-Compose详解

1、Docker是什么&#xff1f; 在计算机中&#xff0c;虚拟化(英语: Virtualization) 是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打破实体结构间的不可切割的障碍&…

【SpringBoot + Vue 尚庭公寓实战】基本属性接口实现(七)

【SpringBoot Vue 尚庭公寓实战】基本属性接口实现&#xff08;七&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】基本属性接口实现&#xff08;七&#xff09;1、保存或更新属性名称2、保存或更新属性值3、查询全部属性名称和属性值列表4、根据ID删除属性名称5、根据…

QSS 自定义QCheckBox

Qt Style Sheets are a powerful mechanism that allows you to customize the appearance of widgets . 简述 QCheckBox支持盒子模型。子控件::indicator可以定义指示器样式。默认情况下指示器在内容矩形框的左上角。属性spacing指定指示器和文本之间的间距。 效果 样式表 …

内网穿透的方式有哪些——快解析的优势

外网穿透内网技术&#xff0c;即内网映射&#xff0c;是把目标本地内网地址和端口发布到互联网&#xff0c;是一种由内网开放到外网的权限操作。那么&#xff0c;内网穿透的方法有哪些呢&#xff1f;做映射外网的方法。需要结合自己本地网络环境和应用场景来实施。这里分享三种…