Matlab GUI图像图像基础

当我们学习c++ MFC的时候,总会看到界面,所以当在用Matlab的时候也想用GUI,这里首先写一点关于GUI界面的一些基础的操作,基本包括了不同的控件的使用,也会给很多的小例子,同时主要是对爱生活,爱网络,爱MATLAB~这个大神的视频的记录,不过真很好,所以就把过程写下来,让更多想入门GUI的有点帮助,当然这篇文章 主要的是基础的应用,后面也做出类似图像处理的GUI界面。整体代码工程在我的资源里面可以下载,下面也会给出分步代码创建可以用来理解、练习。http://download.csdn.net/detail/qq_20823641/9486571

本文主要从三个方面

  1.   打开GUI,初步了解它长什么样子
  2.   一步的步骤是什么?     画控件---属性修改---回调函数
  3.   其他的注意事项       属性中的max min和value是有关的,回调函数都是要获的一个东西,然后显示一个东西,当然如何传递,还要主要属性里面的Tag,string也是经常修改的,新建 文件 新建子菜单,怎么打开一个已经存在的文件的fig模式重新画控件等等

    为了不太长就绘制了一个总图,图像结果包括下面的所有的操作,希望看完以后大家可以自己动手去建立一下,很有意思,也会给图像处理GUI打下基础,相应的代码和文件会上传到csdn的资源,,找不到也可以QQ。

                     Matlab GUI图像图像基础_第1张图片

          下面介绍的是具体的操作,注意在做的时候,一定要先看看上图中,你想要画的是什么,然后找控件,再定义回调函数。

         1 打开GUI

            直接输入guide或者选择打开Matlab  新建Gui File--New--GUI guide出现如下窗口 可点击Blank GUI,出现布局窗口,同时注意

openexisting GUI,如果你关闭了GUI页面可以从这个选型恢复,和运行.m出来是不一样的。

           随便画一个控件,保存文件会生成2个文件,一个是fig,里面包含了你设计的控件,还有一个是m文件,里面是所有空间的函数

双击刚才绘制的按钮,就可以对他的属性进行修改,例如stype就修改就会改变控件的类型从按钮可以编程text等,

有了空间就要给定义,实现他的功能,这里就要编写他的回调函数,对着控件右击看到view callbacks callback回调函数

        2 创建一个文本传递的GUI

       

            Guide,添加一个edittext , 双击修改属性 ,fontsize可以修改字体的大小,string显示的内容 ,tag会对应先后顺序,复制一个edit text 然后加入一个botton,右击它编写他的回调函数  

                           

     function pushbutton1_Callback(hObject, eventdata, handles)
     str=get(handles.edit1,'String');%得到edit1中的字符
     set(handles.edit2,'String',str);%edit2中的字符得到str
    图像结果在上面的图中。

       3 例如设置GUI窗口大小可以调

        在GUI.fig图形设置中,在菜单栏选择tools-GUIoptions-resizebehavior 选择proportional

        4  例如滚动条数值显示在文本框中

        需要一个滚动条slider,双击看属性,里面有MAX MIN滑动范围 还有Tag value string,还有一个static text 双击属性string fontsize,再来一个edit text

       右击滚动条slider,定义回调函数   

 functionslider1_Callback(hObject, eventdata, handles)
 var=get(handles.slider1,'value');%得到滚动条中value
                                set(handles.edit3,'String',num2str(var));%编辑框得到数值,此处需要把数值型转化成字符型
        5 例如radio button check box和toggle button的基本用法

         添加一个radio button 双击属性 max min 选中按钮 显示最大值 取消选中显示最小值 value  tag(radiobutton1改成kj1), string删除不显示注意如果你的max 10 min -1 而value还是0就会出错,因为显示的要么是最小要么是做大,所以要改变value为-1,添加一个edit text 其中Tag改成kj1,右击radio button进行回调函数定义

                                      

                   functionkj1_Callback(hObject, eventdata, handles)
   var=get(handles.kj1,'value');
                 set(handles.kj2,'string',num2str(var))

          添加一个 check box 双击查看属性 max min 和value要对应,tag中改成kj3,添加一个edit text 修改 string tag为kj4

         编辑check box的回调函数                                  

                  functionkj3_Callback(hObject, eventdata, handles)
var=get(handles.kj3,'value');
           set(handles.kj4,'string',num2str(var))

            最后添加一个toggle button,max min value,tag改成kj5,添加一个edit,其中tag改成kj6

            编辑toggle button的回调函数

 functionkj5_Callback(hObject, eventdata, handles)
var=get(handles.kj5,'value');
set(handles.kj6,'string',num2str(var));

       6 例如button group 绘制不同的正弦曲线

          首先创建一个button group控件,双击属性,title修改成绘制不同正弦曲线,然后创建3个radio button 在group中,第一个string改成sin(x) tag改成kj7,第二个string改成cos (x) tag改成kj8, 第三个string改成sin(x)+cos(x )tag改成kj9,注在group中的按钮只能有一个被选中,添加一个坐标轴按钮axes,右击button group进行回调函数,此处view 然后callbacks------selectionchangefcn

           

  functionuipanel1_SelectionChangeFcn(hObject, eventdata, handles)%选择发生变换
   x=0:0.01:2*pi;
  current_Obj=get(eventdata.NewValue,'Tag');%当前选择的控件,结构体,当选被选择的控件的Tag,得到当前被选中的radio button的tag,赋值给current_Obj
     %绘制前要选择当前的坐标系,查看tag
   axes(handles.axes1)
  switchcurrent_Obj%判断哪一个radio button被选中
             case 'kj7'
             y=sin(x);
           plot(x,y);
           case 'kj8'
          y=cos(x);
         plot(x,y);
         case 'kj9'
        y=sin(x)+cos(x);
        plot(x,y);
         end

    7  例如下拉菜单pop up menu的基本用法

        首先创建一个 pop up按钮,双击查看属性 string 输入三个函数 ,tag改成kj10,此处的value对应可以下1或者2或者3,对应显示的string的三个函数中的其中一个

创建一个axes坐标系控件, 定义回调函数

                       

% --- Executes on selection change in kj10.
function kj10_Callback(hObject, eventdata, handles)
% hObject    handle to kj10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns kj10 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from kj10
var=get(handles.kj10,'value');%得到下拉菜单空间的value值,以便确定点击的是控件的哪一行
x=0:0.01:2*pi;
axes(handles.axes2)
switch var
    case 1
        y=sin(x);
        plot(x,y);
    case 2
        y=cos(x);
        plot(x,y);
    case 3
        y=sin(x)+cos(x);
        plot(x,y);
end


         

     8 例如listbox的基本用法

  

     创建一个listbox控件,双击属性string添加四行 1 sin(x) cos(x) sin(x)+cos(x),其中value的数值对应string中的行

     创建一个push button控件,string中修改为选择x轴参数,同样建立一个选择y轴参数的控件,再分别对应2个edit控件

     首先对push button  X控件进行定义回调函数

                       functionpushbutton2_Callback(hObject, eventdata, handles)

selected_index=get(handles.listbox1,'value');

str=get(handles.listbox1,'string');

set(handles.edit7,'string',str{selected_index});

       首先对push button  X控件进行定义回调函数

                        functionpushbutton2_Callback(hObject, eventdata, handles)

selected_index=get(handles.listbox1,'value');

str=get(handles.listbox1,'string');

set(handles.edit8,'string',str{selected_index});

       然后仅需listbox的view callbacks creatfcn

functionlistbox1_CreateFcn(hObject, eventdata, handles)

。。。。。。。。

添加

t=0:0.01:2*pi;

canshu1=t;

   canshu2=sin(t);

canshu3=cos(t);

canshu4=sin(t)+cos(t);

                                   CS={canshu1,canshu2,canshu3,canshu4};

handles.CS=CS;

                                                      guidata(hObject,handles)%保存和更新handles结构体再在选择X参数控件右击定义回调函数

        分别对选择X参数和选择Y参数2个空间进行回调函数添加下面三行代码

x=handles.CS{selected_index};

handles.x=x;

guidata(hObject,handles);

、、、、、、

y=handles.CS{selected_index};

handles.y=y;

guidata(hObject,handles);

          添加一个绘图曲线的push button

        创建一个坐标系axes

        对绘制曲线的控件进行回调函数

                                                         functionpushbutton4_Callback(hObject, eventdata, handles)

axes(handles.axes3)

plot(handles.x,handles.y)

axisequal

     9 例如 菜单控件menu的基本用法

     

点击menu editor -menu bar(菜单栏)(context menus是右击显示的菜单)

新建一个new menu   label改成绘图

在new menu下新建2个菜单(注点击图像菜单上左边第一个图标是新建菜单,左边第二个是新建子菜单),把2个子菜单lable tag分别改成正弦曲线sinx  余弦曲线 cosx

然后创建一个坐标系控件axes,然后再次进入menu editor,对正弦曲线进行回调函数编辑,此处先点击子菜单正弦曲线,然后点击view进去编辑

functionsinx_Callback(hObject, eventdata, handles)

x=0:0.01:2*pi;

y=sin(x);

axes(handles.axes4)

h=plot(x,y);

handles.h=h;

guidata(hObject,handles)

同样的方法进行余弦,区别就是在回调函数,y=sin(x)变成了y=cos(x)

下面来定义一个弹出菜单,就是右击的时候显示的菜单

首先要选择menu editor下的context menus,然后新建一个菜单(左边第三个图标),lable改成line,然后再建立line子菜单,lable改成颜色,然后再建立颜色的子菜单三个,lable tag 分别改成红色 red  绿色green 黑色 black

再建立一个line的子菜单,lable改成线宽,tag改成xiankuan,然后线宽下再建立三个子菜单,lable tag 分别改成线宽1 xiankuan_1 线宽2 xiankuan_2 线宽3 xiankuan_3

想要右击出来菜单还要做一步

双击坐标轴4,找到一个属性叫做UIContextMenu,下拉选择我们定义的Line

这样就可以右击显示菜单了,但是功能不能使用,还要做

点击menu editor 点击contex menus分别进行点击view然后定义回调函数,就是分别在自己的回调函数内添加相应的函数,一个是一行

set(handles.h,'color','r');%红色

set(handles.h,'color','g');%绿色

set(handles.h,'color','k');%黑色

同样的方法进行线宽的回调函数

set(handles.h,'LineWidth',1);

set(handles.h,'LineWidth',2);

set(handles.h,'LineWidth',3);

你可能感兴趣的:(Digital,Image,Processing,Matlab,Matlab,GUI)