0

我想在matlab中制作一个GUI。在 (*.fig) 文件中,将有 2 个按钮。第一种是从目录中读取图像,将其保存到变量中并在 matlab GUI 中显示。

所以在主文件(*.m)中,我将有 2 个代表 2 个按钮的函数。

例如在主文件 (*.m) 中,第一个函数:x=imread('image.bmp');

第二个按钮(第二个函数,与第一个函数在同一个主文件中)是用第一个按钮读取的图像进行处理。所以,我必须从第一个按钮(函数)中获取变量 x 来完成这个过程。如果我得到了 x 变量,我可以将它发送到另一个 *.M 文件。

如何从第一个函数中获取 x 变量。

这是我的代码..

THE MAIN FILE

%First button (Function)
function pushbutton1_Callback(hObject, eventdata, handles)  
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[filename, pathname] = uigetfile({'*.bmp';'*.jpg';'*.gif';'*.*'},        
'Pick an Image File');
citra1 = imread([pathname,filename]);
axes(handles.axes1);
imshow(citra1);
handles.citra1 = citra1;
guidata(hObject, handles);
set(handles.text1,'String',filename);

% 这是我的第二个按钮(功能)

function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[gambr1, psan1, jmlobjk1, brs1, klm1]=BacaCitra1(citra1);
 axes(handles.axes3);
 imshow(gambr1);
 handles.gambr1 = gambr1;
 guidata(hObject, handles);

我想从第一个函数中将“citra1”作为图像变量发送到第二个函数中,所以我可以这样做

 [gambr1, psan1, jmlobjk1, brs1, klm1]=BacaCitra1(citra1);

但有错误消息,如:评估 uicontrol 回调时出错

??? Undefined function or variable 'citra1'.
Error in ==> deteksi2citra>pushbutton1_Callback at 117
[gambr1, psan1, jmlobjk1, brs1, klm1]=BacaCitra1(citra1);

 Error in ==> gui_mainfcn at 96
    feval(varargin{:});

  Error in ==> deteksi2citra at 42
gui_mainfcn(gui_State, varargin{:});

 Error in ==>        @(hObject,eventdata)deteksi2citra('pushbutton1_Callback',hObject,even data,guidata(hObject))
 ??? Error while evaluating uicontrol Callback

谢谢你的帮助:D

4

1 回答 1

0

看起来你已经在做你需要做的事情了,事实上,看起来你正在并行使用两种方法。您将变量保存citra1handles结构中,pushbutton1_Callback并且在两个回调中都接受该结构作为用户变量。您可以handles使用guidata.

请参阅在 GUI 的回调guidata之间共享数据,以了解在任何一种情况下如何从中提取citra1数据handles

如果您正确设置回调,包括handles结构,那么简短的答案是使用handles.citra1而不是仅citra1在您的第二个回调中使用。但是,我强烈建议您阅读回调文档以了解正在发生的事情。

于 2013-07-13T23:13:35.443 回答