一、简介

本模拟停车位管理系统的功能是:系统对进入停车位的车辆进行车牌识别,将识别出来的车牌号显示出来;然后对车主进行人脸识别,框出车主照片的人脸部分作为车主信息的标记,记录在系统库中。车辆在库期间,系统使用者可以随意查看车辆与车主信息的获取过程及获取结果。而当车辆离开时,系统库将清除该车辆与车主的所有信息。

二、源代码

function varargout = slyarh_main(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @slyarh_main_OpeningFcn, ...'gui_OutputFcn',  @slyarh_main_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
end
if nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
function slyarh_main_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = slyarh_main_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;%“※﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ 启动画面 ﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ ※”
ImageFile  = '.\字符模板\wel.png';
ScreenSize = get(0,'ScreenSize');
jImage     = im2java(imread(ImageFile));
jfBounds   = num2cell([...(ScreenSize(3)-jImage.getWidth)/2 ...(ScreenSize(4)-jImage.getHeight)/2 ...jImage.getWidth ...jImage.getHeight]);
jFrame     = javax.swing.JFrame;
icon       = javax.swing.ImageIcon(jImage);
label      = javax.swing.JLabel(icon);
jFrame.getContentPane.add(label);
jFrame.setUndecorated(true)
jFrame.setBounds(jfBounds{:});
jFrame.pack
jFrame.show
pause(3)
jFrame.dispose
%“※﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏  ﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ ※”%“※﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ 背景和logo ﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ ※”
h = handles.figure1; %创建一个Figure,并返回其句柄
newIcon = javax.swing.ImageIcon('.\字符模板\logo.png')
figFrame = get(h,'JavaFrame'); %取得Figure的JavaFrame。
figFrame.setFigureIcon(newIcon); %修改图标
ha=axes('units','normalized','pos',[0 0 1 1]);
uistack(ha,'down');
ii=imread('.\字符模板\bg1.png');
%设置程序的背景图为beijing1.jpg
image(ii);
colormap gray
set(ha,'handlevisibility','off','visible','off');
%“※﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏  ﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ ※”%“※﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ 停车 ﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ ※”
function bt_in_Callback(hObject, eventdata, handles)
[filename pathname]=uigetfile({'*.jpg';'*.png';'*.bmp'}, '正在拍摄入场的车辆~');
I=imread([pathname '\' filename]);
handles.I=I;
guidata(hObject, handles);
axes(handles.axes1);imshow(I);title('汽车靓照');
axes(handles.axes11);imshow(I);title('汽车靓照');
imwrite(I,'.\进车记录\原.jpg');
set(handles.bt_new,'visible','on');
set(handles.ui_in,'visible','off');
set(handles.ui_out,'visible','on');
%“※﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ 进车 ﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏﹋﹏ ※”
I=handles.I;
I1=rgb2gray(I);
I2=edge(I1,'roberts',0.18,'both');
imwrite(I1,'.\进车记录\灰度.jpg');
imwrite(I2,'.\进车记录\边缘.jpg');
se=[1;1;1];
I3=imerode(I2,se);%腐蚀操作
imwrite(I2,'.\进车记录\腐蚀.jpg');
se=strel('rectangle',[25,25]);
I4=imclose(I3,se);%图像聚类,填充图像
I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分
[y,x,z]=size(I5);%返回15各维的尺寸,存储在x,y,z中
myI=double(I5);
tic      %tic计时开始,toc结束
Blue_y=zeros(y,1);%产生一个y*1的零针
for i=1:yfor j=1:xif(myI(i,j,1)==1)%如果myI图像坐标为(i,j)点值为1,即背景颜色为蓝色,blue加一Blue_y(i,1)=Blue_y(i,1)+1;%蓝色像素点统计endend
end
[temp MaxY]=max(Blue_y);
%Y方向车牌区域确定
%temp为向量yellow_y的元素中的最大值,MaxY为该值得索引
PY1=MaxY;
while((Blue_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;
end
PY2=MaxY;
while((Blue_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);
%X方向车牌区域确定
Blue_x=zeros(1,x);%进一步确认x方向的车牌区域
for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)=Blue_x(1,j)+1;endend
end
PX1=1;
while((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;
end
PX2=x;
while((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;
end
PX1=PX1-1;%对车牌区域的矫正
PX2=PX2+1;
dw=I(PY1:PY2-8,PX1:PX2,:);
t=toc;
imwrite(dw,'.\进车记录\定位.jpg');
b=rgb2gray(dw);%将车牌图像转换为灰度图
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3);%T为二值化的阈值
[m,n]=size(b);
d=(double(b)>=T);%d:二值图像
imwrite(d,'.\进车记录\二值.jpg');
% imwrite(d,'二值化.jpg');
%均值滤波前
%滤波
h=fspecial('average',3);
%建立预定义的滤波算子,average为均值滤波,模板尺寸为3*3
d=im2bw(round(filter2(h,d)));%使用指定的滤波器h对h进行d即均值滤波
imwrite(d,'.\进车记录\均值.jpg');
% imwrite(d,'均值滤波.jpg');
%某些图像进行操作
%膨胀或腐蚀
se=eye(2);%单位矩阵
[m,n]=size(d);%返回信息矩阵
if bwarea(d)/m/n>=0.365%计算二值图像中对象的总面积与整个面积的比是否大于0.365d=imerode(d,se);%如果大于0.365则进行腐蚀
elseif bwarea(d)/m/n<=0.235%计算二值图像中对象的总面积与整个面积的比值是否小于0.235d=imdilate(d,se);%%如果小于则实现膨胀操作
end
imwrite(I2,'.\进车记录\膨胀.jpg');
%寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(d);
[m,n]=size(d);
k1=1;
k2=1;
s=sum(d);
j=1;
while j~=nwhile 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(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0;%分割end
end
%再切割
d=qiege(d);
%切割出7个字符
y1=10;
y2=0.25;
flag=0;
word1=[];
while flag==0[m,n]=size(d);left=1;wide=0;while sum(d(:,wide+1))~=0wide=wide+1;endif wide<y1 %认为是左干扰 d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[1 1 wide m]));[m,n]=size(temp);all=sum(sum(temp));two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));if two_thirds/all>y2flag=1;word1=temp;%word1endd(:,[1:wide])=0;d=qiege(d);end
end
%分割出第二至七个字符
[word2,d]=getword(d);
[word3,d]=getword(d);
[word4,d]=getword(d);
[word5,d]=getword(d);
[word6,d]=getword(d);
[word7,d]=getword(d);
[m,n]=size(word1);
%商用系统程序中归一化大小为40*20
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]);
axes(handles.axes2);imshow(word1);
axes(handles.axes3);imshow(word2);
axes(handles.axes4);imshow(word3);
axes(handles.axes5);imshow(word4);
axes(handles.axes6);imshow(word5);
axes(handles.axes7);imshow(word6);
axes(handles.axes8);imshow(word7);

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]呙润华,苏婷婷,马晓伟.BP神经网络联合模板匹配的车牌识别系统[J].清华大学学报(自然科学版),2013,53(9):1221-1226.
[6]鲁扬.基于BP神经网络的车牌识别算法研究[D].大庆:东北石油大学,2018.
[7]李强,张娟.一种改进的基于模板匹配的污损车牌识别方法[J].智能计算机与应用. 2019,9(03).
[8] 梁凯.基于MATLAB的汽车车牌识别系统的设计与实现[D] .哈尔滨:黑龙江大学, 2018.
[9]刘雄飞,朱盛春.车牌字符多特征提取与BP神经网络的识别算法[J].计算机仿真,2014,31(10):161-164,290.
[10]乔有田.基于数学形态学和灰度跳变特征的车牌定位方法[J].工业控制计算,2015(2):77-78

【车牌识别】基于matlab GUI模拟停车位管理系统【含Matlab源码 898期】相关推荐

  1. 【光学】基于matlab GUI杨氏双缝干涉【含Matlab源码 001期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI杨氏双缝干涉[含Matlab源码 001期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  2. 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  3. 基于JAVA政府机关门禁管理系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA政府机关门禁管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA政府机关门禁管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  4. 基于JAVA外贸服装订单管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA外贸服装订单管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA外贸服装订单管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  5. 基于JAVA忘忧小区物业管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA忘忧小区物业管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA忘忧小区物业管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  6. 基于JAVA基于web的学校工资管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA基于web的学校工资管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA基于web的学校工资管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  7. 基于JAVA智能道路交通管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA智能道路交通管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA智能道路交通管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: ...

  8. 基于JAVA-超市会员积分管理系统-计算机毕业设计源码+系统+lw文档+部署

    基于JAVA-超市会员积分管理系统-计算机毕业设计源码+系统+lw文档+部署 技术栈 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui.HTML. ...

  9. 基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S ...

  10. 基于JAVA校内图书馆智能管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA校内图书馆智能管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA校内图书馆智能管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S ...

最新文章

  1. 《高效团队开发工具与方法》
  2. eclipse配置Maven中的Tomcat的使用
  3. java调用存储过程
  4. CTFshow php特性 web133
  5. mysql error.log 权限_docker-compose 启动mysql 容器时 error.log 无权限访问怎么办?
  6. SignalR系列教程:SignalR快速入门
  7. C++类成员函数在.cpp中设置成inline后无法解析的问题
  8. Android 检测是否连接蓝牙耳机
  9. “约见”面试官系列之常见面试题第三十二篇之async和await(建议收藏)
  10. C++PrimerPlus学习——第七章编程练习
  11. python2.7没有pip_python2.7无法使用pip怎么办
  12. RxJava 在Android中的应用
  13. 数据结构——拓扑排序算法理解和实现
  14. UVA 10247 Complete Tree Labeling
  15. Spark综合学习笔记(五)SparkStreaming介绍
  16. 如何将Mac的磁盘空间从0G清理出100G?
  17. 台式计算机大全,电脑品牌大全..3MT产品库
  18. Dota2世界冠军OG被AI碾压,全程人类只推掉两座外塔 | 广东省智能创新协会
  19. 计算机视觉(东北大学)慕课参考答案
  20. Python Pillow批量转换tif格式到jpg

热门文章

  1. 如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
  2. 用Python爬虫爬取“女神吧”上的照片。
  3. 【java】序列化反序列化
  4. 丛铭俣 160809324 (作业5)
  5. AJAX不能访问MVC后台程序的问题
  6. ZeroClipboard / jquery.zclip.min.js跨浏览器复制插件使用中遇到的问题解决
  7. word多个文档标签显示在一个窗口
  8. 190816每日一句
  9. Atitit 多语言互相调用总结mltlan invk现在我们开发项目往往会采用多种语言,各取所长 组合使用。。常常需要互相调用为什么会调用多种语言?1.开发效率与可读性 ,一种情况是实现同
  10. Atitit uri url格式规范与解析器 .URIparser 理解URI和URL的区别,我们引入URN这个概念。 URI = Universal Resource Identifier 统一资