Matlab在gui中显示图像

时间:2014-10-12 05:28:36

标签: image matlab user-interface

我一直试图在浏览后显示图像。但是,我遇到了错误:

???参考不存在的字段'轴1'。 ==>中的错误ImGui> Browse_Callback at 19             轴(handles.axes1) ???评估uicontrol回调时出错

我尝试使用两个预定义的轴[比如' axes(handles.axes1);']以及后定义的[类似' imshow(imgorg,' Parent',handles.axes1);']。不幸的是,这两种技术对我来说都没有用,我一直坚持使用轴。我也试过制作一个自定义轴并使用它,但它也无法在图上显示我的图像。任何人都可以在我的代码中识别/纠正问题:

function ImGui
    f =figure('Visible','on','Position',[460,200,700,385]);
    BrowseBt = uicontrol('Style','pushbutton',...
                 'String','Browse','Position',[600,350,70,25],...
                 'Callback',@Browse_Callback);
    dispnames  = uicontrol('Style','text','String','',...
           'Position',[50,350,400,20]);
    movegui(f,'center');

    function Browse_Callback(hObject, eventdata, handles) 

        handles.output = hObject;
       [FileName,PathName] = uigetfile('*.jpg;*.png','Select an image file',...
                                    'C:\Users\owner\Downloads\Conjunctiva\SGRH');

       fpname = strcat(PathName,FileName);
       dispnames  = uicontrol('Style','text','String',fpname,...
           'Position',[50,350,400,20]);
       imgorg = imread(fpname);

       handles.output = hObject;
       guidata(hObject, handles);
       axes(handles.axes1);
       imshow(imgorg);
%        ImAxes = axes('Parent', f, ...
%                  'Units', 'normalized', ...
%                  'position',[50 50 400 250]);
%              'HandleVisibility','callback', ...
%        imshow(imgorg, 'Parent', handles.axes1);
%        imshow(imgorg, 'Parent', handles.ImAxes);
    end
end

1 个答案:

答案 0 :(得分:1)

使用guidata功能 并稍微重新组织您的代码

您定义所有的uicontrols(按钮,文本框,轴等...)并将其句柄分配给结构(此处称为handles)。然后,当您完全定义GUI时,请调用guidata将此句柄结构存储在任何回调可以访问它的位置。

然后在你的回调函数中,再次调用guidata来检索这个句柄结构并访问你的对象(你的轴和你的文本框)。

function ImGui
    f =figure('Visible','on','Position',[460,200,700,385]);
    handles.BrowseBt = uicontrol('Style','pushbutton',...
                 'String','Browse','Position',[600,350,70,25],...
                 'Callback',@Browse_Callback);
    handles.dispnames  = uicontrol('Style','text','String','',...
           'Position',[50,350,400,20]);
    handles.ImAxes = axes('Parent', f, ...
             'Units', 'pixels', ...
             'position',[30 30 640 300],...
             'visible','off');
    movegui(f,'center');
    guidata(f,handles) ;

    function Browse_Callback(hObject, eventdata) 
       handles = guidata(hObject);

       [FileName,PathName] = uigetfile('*.jpg;*.png','Select an image file');
       fpname = strcat(PathName,FileName);

       imgorg = imread(fpname);

       set(handles.dispnames,'String',FileName)
       set(handles.ImAxes,'visible','on') ;
       imshow(imgorg, 'Parent', handles.ImAxes);
       guidata(hObject, handles);
    end
end

在这种特定情况下,您不需要在回调结束时再次调用guidata来再次存储值,但这是一种很好的做法,以防您修改了要保存更改的内容