如何实现MATLAB GUI界面中,从文件夹中读取图片,确定后并显示,以及不同回调函数之间变量的传递问题 |
您所在的位置:网站首页 › matlab中输入图片 › 如何实现MATLAB GUI界面中,从文件夹中读取图片,确定后并显示,以及不同回调函数之间变量的传递问题 |
本人在用使用MATLAB GUI制作界面的过程中,要实现从文件夹中读取图片,单击确定按钮后并显示图片,对于其中关键性的问题搜集了众多资料进行解决,现将其进行梳理。
该功能部分所需要的控件为:2个按钮(Pushbutton),用于选择图片和确定以显示图片;1个可编辑文本框(edit),用于显示文件路径和文件名;1个坐标轴框(axes)用于显示图像。 这部分的界面如下图所示: 1.实现点击“选择图片”按钮从文件夹读取文件,选择需要的对象:进入到“选择图片”按钮的回调函数(右击选择图片按钮---单击查看回调----选择Callback),在该按钮的回调函数中添加以下代码段: [filename filepath]=uigetfile({'*.bmp;*.jpg'},'选择图片文件'); set(handles.edit3,'string',[filepath filename])由于本人要显示的是图片,所以文件类型只选择了.bmp和.jpg两种格式,当然你可以根据自己的需求自己添加啦!edit3就是静态文本框的Tag值,用于识别不同的控件。 filename中保存的是文件名,filepath中保存的是路径,注意第二句代码中一定是filepath在前,以便后面可以读取到文件。 如果想在未选择到照片时给出提示,可将其修改为if语句控制: if isequal(filename,0) || isequal(filepath,0) errordlg('没有选中文件,请重新选择','出错'); return; else set(handles.edit3,'string',[filepath filename]) end实现效果如下图: (1)弹出的文件夹选择框: (2)选择好文件之后,单击打开,文件路径以及文件名会显示到“选择图片”按钮后面的静态文本框中,如下图所示: (3)如果没有选择到图片,会弹出“未成功选择文件,请重新选择”的提示框,也就是上面if判断那里写过的,如下图所示: 至此从文件夹选择图片的功能已经完成。 接下来要实现的是单击“确定”按钮,可以在坐标轴控件中显示刚才所选择性的图片。 这个地方是重点!!!涉及到不同回调函数之间的变量传递问题,都是通用的,会一个其他的都可以解决。 注意我这里提到的不同回调函数之间的变量传递是在同一个GUI界面下的哦,不是不同GUI界面之间的传递。 实现同一个界面下不同控件的回调函数之间的变量传递有多种方法,如采用global全局变量、通过handles传递数据、通过setappdata 和 getappdata实现、通过save 和 load等一些方法。推荐使用通过handles的方法。 下面介绍handles方法在不同回调函数间传递变量的方法: 比如要A回调函数中的有个变量,B回调函数需要这个变量的值,这就需要从A传递到B。 在A回调函数中添加下面代码: handles.X=X; guidata(hObject, handles)注意两行代码必须在一块写,代码中X表示需要传递的变量。 在B回调函数中添加下面代码: X=handles.X;此时就完成了参数的传递。 2.实现单击“确定”按钮,在坐标轴中显示出所选的照片:在“选择图片”按钮的回调函数下,将上文中文本框中的路径赋值给road,作为传递的变量,在利用handles传递,代码如下: road=get(handles.edit3,'String'); handles.road=road; guidata(hObject, handles)然后在“确定”按钮的回调函数下,添加下面代码: road=handles.road; axes(handles.axes3); %在第一个轴中显示 imshow(road);第一行用于完成传递的变量,后两行用于将图片显示在axes控件中,效果如下: 至此,功能就完成啦! 当然,有人可能有疑问,imread函数的使用不是imread('l路径')嘛,上面代码为啥引号没了?这个问题我当时解决了好久,最后在matlab中进行单步调试,在工作区(见下图)中发现,这个road的值本身就带有引号,所以此时使用imread函数反而就报错啦! 至此,本文一开始提到的功能就完成了! 不同回调函数之间变量的传递是个重点,尤其进行图像处理时,要递进进行,变量传递是必不可少的。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |