实例介绍
一个实例搞定Matlab gui编程,简单易学。
昏 Menu edit or 日文件 nerT 1 AS 打开 开 回 Enabl Hel- 昏He Edit 已4→↑↓X 口自文什 honu Propcrties 打訐 保存 回 Enable th More Proparties. =区 Hh E? 自文件 Labcl:速出 T 感出 filc omit ati wl Ert Ca- lback:a吐 t omet a[% More Properties.. 如果需要在菜单项“退出”上面添加一个分割线的话,选中“ Separator above this item”就 行了 保存我的界面为 pjimage. fig.保存完毕之后,会自动打开 pLumage. n文作,而我们所有的程 序都是要写在这个M文件里面的。在编程中,我们的每一个鼠标动作都对应一个 Callback 凶数。那么我们的菜单项也是如此的。 在界面上,单击鼠标右键选择“ Propcrty Inspector",即可打开属性窗口。当我们点击不同的 控件吋,其对应的属性都会在这里显示,我们可以进行修改。最主要的属性莫过于Tag属性 和 String属性。 设置当前 Figure窗口的Tag属性为: figure pjimage,窗口的标题(Name属性)为:图像处理 实例。如下 Inspector: figure..回回区 MuBar 图像处理例 Portrait 586 PaperpositionMl [20.8429.677] Imeter 田[16x16dou 盘ut.①[1x2山 103.829,154112 Resirefcr |21 然后,点击工具栏的保存按钮。之后,点击工具栏的运行按钮( Run Figure)注意,工具栏 的图标都会有提示的,像运行按钮的提示就是 Run figure.我们会看到如下的界面: GUIDE X (i Filc C:l-ministrat or URtT\MATLAB\Ex amplclpjimagcm ia not found in the current directory or on the MATlAB path. To continue activation, you can either change the MAtL B current directory or add it3 directory to thc MATLAB path Change Directory [ Add to Path[Cancel[ Help 那说明,我们保仔的fig文件的目录不是当前目录,但是没关系啊,我们只要点击“ Change Directory”来改变当前目录。当然,如果你想把当前目录添加到 MATLAB路径也可以,那 就点击“ Add to path”就OK了。我在这里推荐点击“ Change Directory,因为没有什么太 大必要把其添加到 MATLAB路径中,一般是工只箱需要添加或者我们的函数或程序写完了, 而在 MATLAB的命令窗口找不到我们的函数的时候,我们可以将函数或程序所在的目录添 加到 MATLAB路径。 总之吧,点那个按钮,要看个人的爱好了。不管点击两个按钮的那一个按钮,都会正确的运 行程序的。 我们的程序运行时的样子,是这样的: 图像处理实例 文件 文件下面的菜单项和快捷键我们都能看到,但是我们没有写程序,所以就算点也没有什么响 应。还有如果不想改置快捷键,可以在 Menu editor中设置,只要把其选择为ctrl+none就 行了,如下 昏 Menu edit or 自 这样的话,保存项就没有了快捷键了。我们可以通过上面的按钮“Ⅴiew”来查看该菜单项 的响应函数,也就是 Callback函数。也可以在 pLumage:m中看,比如保存的Tag属性是 m file save,那么它对应的 Callback函数的名字就是 m file save callback。依次类推了。 下面我们来写打开菜单项的函数,要打开一个图片,当然要用打开对话框了。在界面编程中, 打开对话框的函数是 uigetfile.关于它的详细的说明用 help uigetfile命令查看。下面是打开 菜单的响应函数: function m file open Callback(hobject, event data, handles) Filename, pathname]= uigetfile( t*. bmp: * jpg: * png: * jpeg,' Image Files (* bmp, * jpg, * png 求.jpeg) , A11 Files(*,*)”} Pick an image') 保存,m文件,并运行程序。点击“文件”下的“打开”,会打开如下的打开对话框 ick an image 查找范围C1:Emn1 ←回 我的文挡 我的电脑 网上邻居 文件类型! Inage Ii1bm,*jPB 取消 选择一个文件之后,稈序中的 filename就是你选择的文件的文件名, pathname就是该文件 所在的目录的路 比如: filename=5 1pg, pathname =C: Documents and Settings\ Administrator My Documents\ 那么获得路径之后,我们要怎么样才能读入和显示一个图片呢?读入图片可以用 inroad函 数,而显示可以在个坐标轴上。那么我们需要在界面上画上·个坐标轴,为了对比,我们 画两个坐标轴,一个显示处理前,一个显示处珥后的。并日将处理前的哗标轴的Tag属性改 为 axes src,处理后的坐标轴的lag属性为 axes dst.。更改之后,保存。如下: 回囟 口ed|“哈|图愚园呼哈p 然后在 m file open Callback程序原来的基础上,再添加如下的程序 axes( handles. axes src);%用axes命令设定当前操作的坐标轴是 axes src path-[ pathname filename];‰将文件名和日录名组合成一个完整的路径 ashow( imread( fpath);%用 imread读入图片,并用 imshow在 axes src上显示 运行程序,通过“打开”菜单项,打开一个图片。效果如下: 2图像处平实例 ∩通 那么如何来保存一副图片?用 amorite命令。但 amiri te命令的第一个参数就是你 读入的图片数据,也就是 imread的返回值。这样的话,我们就要将 m file open Callback中的程序做一点小小的改动。将最后一句 (i llIlShlOw(ileac d(path),更改为两句,如 img src=imread (fpath); imshow(img src) 不仅如此,我们的保存菜单的 Callback函数,如何去获得打开菜单的 Callback 函数下的 Img src变量呢?这里就要将 Img Src来作为一个共享的数据。许多界面 编程的朋友,喜欢用 globa声明。我个人不喜欢这样用,因为有更好的方法。那 就是用 se tappal和 ge lappland两个函数。我们可以为界面上面的任何一个具有 Tag属性的空间添加应用程序数据。当然我比较喜欢将这些共享的应用程序数据 统添加到 Figure窗凵上,因为这样谷易记,如果个控件一个,感觉不谷易记 你在.m文件中会发现除了各个菜单项的Ca11back函数以外,还有两个函数: pJimage_0 peningFcn和 pjimage OutputFcn.而 pjimage OpeningFcn就相当于界 面的初始化函数,而 pjimage OulputFcn则是界面的输出函数,也就是当你不运 行fig,而调用.m文作时的返回值。 所以,我们要在 pRimage0 peningFcn中添加如下的程序,米共享这个 Img src矩 阵。代码如下: setappdata(handles. figure pjimage, img src', 0) 然后,在 m file open Ca1back函数的最后写上如下程序: setappdata (handles. figure pjimage, img src, img src) 那么,我们在 m file save callback函数中就可以像这样的米提取 Img src,如 img src-getappdata(handles. figure pjimage, img src') 那么保存的吋候,自然会用到保存对话框了。要用倮存对话框,就要用到 uiputfile函数了,其体的请川 help uiputfile查看。 那么,保存菜单项下的程序( m file save callback),可以这样写: Filename, pathname]=uiputfile(i*. bmp, BMP files': '* jpg: , JPG files,' Pick an Image) f isequal(filename, 0) isequal(pathname, 0) return;%如果点了“取消” el se fpath- fullfile( pathname, filename);%获得全路径的另一种方法 end mg src= getappdata( handles. figure pjimage,’ 1mg src');%取得打开图片的 数据 1 write( Img src, fpath);%保存图片 下面是退出菜单项的程序的。要退出界面,只要用 close函数就行了,但是通常都会有提示的。 比如你如果进行了处理图片,而又没有休存处理后的图片,那么在关闭的时候就应该给出提 示,询问是否进行保存。不过,在这里,我们先不做这个工作,等后面有需要的时候再写吧 因此,这里的退出菜单项的程序就是一句,如下: close (handles figure p jimage) 其实,用 delete函数也是可以的,就是: delete( handles. Igure plumage);看你的心情了 但是运行程序的时候,你会发现,当你打开图片的时候,如果点“取消”按钮,那么在 MATLAB 的命令窗口会弹出错误,那是因为我们没有处理取消的情况。下面我们来处理下这个问题 只要把 m lile open Callback面的程序更改为如卜程序即可: Filename, pathname]= uigetfile( t*. bmp; *k. jpg: *k. png: * jpeg,' Image Files (*. bmp, *. jpg, *. png Jpeg 冰.半 A11 Files(*,*)”} Pick an image') f isequal(filename, 0) isequal(pathname, O) return en axes(handles axes src) fpath=Pathname filename] img src-imread(fpath) show(img src selappdala(handles. figure pjimage, img src, img src) 下面我们来做一个图像二值化的一个图像处理。用上面的方法添加一个“图像处 理”菜单,如 Edi 自女f 打开 ab∈1:图处理 自囡僚 allvac u(uai[可 NurE P: JelLIes.. 在其下面添加一个“图像二值化”的菜单项,如下 曾 Menu edit or 巴回区 ↑↓X l京件 Wenu properties 开存出 Lac:四像二值化 科保 自图 ll +HUrLe 像二值化 □Scpa 1=二n □ Callback: %au- omatic Meni Rar 然后,点击“0K”关闭菜单编辑器,并保存整个界面。如果我们的.m文件中没有 对应的Ca11back时,我们可以点击上图中的“view”按钮来生成一个Ca1back 函数。图像二值化,有一个阈值的设置,那么我们可以新建一个界面,在这个界 面上放一个滑动条来设置图像二值化的阈值。同时,有一个文本,显示当前滑动 条的值。那么我们新建一个空白界面,在它上面画一个 Static text和 Slider控 件,然后用工具栏的对齐工具( Align Ob jects),来对其这两个空间。如下: bjects o冈 吧明几 哥司 匚cacl匚1y 然后,将这个界面保存为im2 bw args.fig。整个设计如下: im2bw arge fi File edit View Layout Tools yelp 1白H站电自可c|串鄙晶函回卧哈心 Current Pnin: [3.30, 1n.] Pnsitinm: [M 11ti, Mn1+i, Nnl+i, Mnlti] 你可以设置 Static text的 Fontsize属性为10,这样字体会更大一点。设置 Static Text的Tag属性为 txt display,设置滚动条的Tag属性为 slider val。为了能够在 滚动条滚动时, Static text显小滚动条的值,需要在滚动条的 Callback中写 如下程序,你可以在滚动条上点击右键,选择“ View Callbacks”下的“ Callback 直接进入滚动条的 Callback函数( slider val Callback)。 al=get(hOb ject, 'value') set(handles. txt display, String, num2str(val)) 保存,运行程序,就可以滑动滚动条,而Sτaτ ic Text就会显示相应的值。在 figure :双击打廾 figure(有方块的底层窗口)的属性窗口,将其Tag属性设置为 “ figure im2bw”,将其№ame属性设置为“设置图像二值化阈值”。然后,保存 界面。运行时,如下 设置图像二值化值 那么,我们想的是,当滑动条滑动时,将二值化的图像显示在 pJlmage.fig中的 axes dst坐标轴上的。那么怎么办呢?首先,要做的是,当点击 pLumage.fig菜 单“图像处理”下的“图像二值化”的时候,会打开 im2bw args.ig。这个时侯 就是我们要调用im2 bw args.m的时候了。当我们调用它的时候,会返回一个句柄 而这个句柄就是指向打开的i2 bw args.fig的。关丁更详细的,你可以参看 im2 bw args.m文件的最前面的注释,其中有这样写 %oH= IM2BW ARGS returns the handle to a new IM2BW args or the handle g the existing singleton%. 那就说明,我们可以如上的方式打开i2 bw args.fig。所以在“图像二值化”的 Cal1back函数( m Image2 lbw callback)下,写上如下的程序 h=im2bw args 然后,保存 pIllage.'ig.还有就是,最好将i2 bw args.ig和 pElage.Iig保存 在一个目录下面。然后,运行 pJimage.fig,可以看到,当点击“图像二值化” 的时候会打开im2 bw args.fig,同时滑动条滑动时也会显示响应的值。 下闻来说说如何在滑动条滑动时,将滑动后的二值化图像显示到 PJ mage的 axes dst坐标轴屮。 首先,我们要获得 p]image的 figure的句柄,这个可以通过 findob i函数来完成, 之后将返回值用 guihandles来转换成一个句柄。之后,就可以用这个转化后的句 柄米引用 p image.fig中的任何一个控件了。所以,我们在im2 bw args.fig下的 滑动条的Ca11back数中添加如卜函数: h pjimage=-getappdata(handles. figure im2bw, h pjimage') axes(h pjimage axes dst) mg src- getappdata(h pjimage figure pjimage, img src) bw=im2bw(img src, val) imshow(bw) 然后,在im2 bw args_ OpeningFcn中添加: h pjimage=findobj( Tag,'figure pjimage') h pjimage-guihandles(h pjimage setappdata(handles. figure im2bW, h pjimage', h pjimage) 然后,保存,运行。效果如卜 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论