手写数字识别问题(2)——利用matlab搭建GUI界面

经过GUI的学习(详见博客:https://blog.csdn.net/didi_ya/article/details/105357279
),小白逐渐了解了MATLAB的GUI界面及其搭建。下面是我自己搭建的手写数字识别GUI界面。
单一数字识别
在这里插入图片描述
多数字识别
在这里插入图片描述
下面进行一下详细介绍。具体各个按钮和Tag键的含义这里就不详细介绍了,详见:MATLAB之GUI界面介绍与搭建
这里主要介绍一下句柄调用,多菜单使用以及其他操作。

菜单1——单一数字识别

1.按钮创建及回调

.m文件中原始函数函数不做任何改变,在GUI界面中新建四个按钮,右键“查看回调”——>“callback”,进入按钮的函数体内,
在这里插入图片描述
这样就可以当按下按钮pushbutton1时,打开图像了。
其他按钮的回调函数设置与其类似,这里不再赘述,需要注意的是:
由于后面的回调需要用的图像I,因此,在该函数内加一条语句,使其变成全局变量:

global I

(注:按钮名称的修改为双击按钮,修改其FondSize和String即可)
在这里插入图片描述

2.坐标轴创建及回调

GUI界面中创建坐标轴,如图所示:
在这里插入图片描述
其显示界面如图所示:
在这里插入图片描述
那么如何将其坐标轴都隐藏掉呢?
这里,介绍一下,
首先,双击打开“XTickLabel”、“YTickLabel”,
在这里插入图片描述
将内容全部删除。然后将“XColor”、“YColor”设置成白色。

在这里插入图片描述
ok,完成。
在这里插入图片描述

3.按钮与坐标轴联合

既然我的pushbutton1读取了图像,那么我想要显示图像。如果不进行任何操作,你就会发现,坐标轴与按钮不同步。那么,如何将坐标轴设置与按钮同步呢?
这里在pushbutton1中加入语句:

axes(handles.axes1) 

如图,
在这里插入图片描述
ok!

4.清除按钮

这里我设置了清除按钮,清除按钮的作用是:
清除掉读取的图片,清除掉显示的图像及数字等等。
清除按钮的语句为:

try 
    delete(allchild(handles.text1));
    delete(allchild(handles.axes1));
    delete(allchild(handles.axes2));
    set(handles.text1,'String','');%设置字符串text1为空
end

text1是这里的静态数字——“识别数字”
“识别结果”为“面板”,可在右边找到。
在这里插入图片描述

5.退出按钮

退出按钮用于退出系统,语句为:

close(gcf);

6.多菜单栏

点击“菜单编辑器”即可进入。
在这里插入图片描述
在这里,可以设置标签,标记,启用此项,等等。如下图所示。
在这里插入图片描述
点击回调——>查看,即可查看.m文件中的回调函数。
在这里插入图片描述

7.创建菜单2的一些项

同样在原始GUI界面上进行创建,不过,要把Visable选项改为“off”,如下图所示。
在这里插入图片描述
其他按钮和坐标轴创建与上述类似。
创建完成后,你会发现,GUI界面混乱不堪,不要着急,慢慢整理。
首先,进入菜单栏的回调函数,进行设置。
Untitled_1_Callback中,将想要在界面1中显示的设置为on,将想要在界面2中显示的设置为off
如图所示:
在这里插入图片描述
而Untitled_2_Callback恰恰相反,
在这里插入图片描述
这样就可以做到,点击菜单1即可显示想要在菜单1中显示的内容了。

将所有都完后,大概示意图如图所示:
在这里插入图片描述
这时,会发现一个问题:
你如果打开了一张图像,然后再点击另一个菜单,这张图像不会消失,而是会一直在GUI界面上显示。要解决这一问题,必须在菜单栏回调函数后加几行语句,进行删除,
如在Untitled_1_Callback后加

try 
    delete(allchild(handles.Multi));
    delete(allchild(handles.Multi_yu));
    delete(allchild(handles.a));
    delete(allchild(handles.b));
    delete(allchild(handles.c));
    delete(allchild(handles.d));
    delete(allchild(handles.text6));
end

这样,我的Untitled_1_Callback如下:

function Untitled_1_Callback(hObject, eventdata, handles)

h1=[handles.pushbutton1 handles.pushbutton2 handles.pushbutton3 handles.pushbutton4 handles.Original_Image handles.Image_Preprocessing handles.uipanel1 handles.text1];
set(h1,'Visible','on');
h2=[handles.pushbutton5 handles.pushbutton6 handles.pushbutton7 handles.pushbutton8 handles.pushbutton9 handles.Multi handles.Multi_yu handles.uipanel2 handles.text2 handles.text6];
set(h2,'Visible','off');
try 
    delete(allchild(handles.Multi));
    delete(allchild(handles.Multi_yu));
    delete(allchild(handles.a));
    delete(allchild(handles.b));
    delete(allchild(handles.c));
    delete(allchild(handles.d));
    delete(allchild(handles.text6));
end

这样就可以及时把想要删除的东西去掉。
还有一个地方没有讲到——数据传递

set(handles.text2,'String',endresult);%将endresult赋值给handles.text2
guidata(hObject,handles);%保存handles结构体

这条语句用于给静态文本赋值,并保存handles结构体(在我的程序中,用于给识别后的数字赋值并保存)
ok!大功告成!

下面展示一下我的GUI界面:
单一数字识别:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多数字识别:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
okkk!大功告成。如有不足,请评论告知。

  • 18
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wendy_ya

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值