0

matlabでGUIを作りたいです。(*.fig) ファイルには、2 つのプッシュ ボタンがあります。1 つ目は、ディレクトリからイメージを読み取り、変数に保存して、matlab GUI に表示することです。

したがって、メイン ファイル (*.m) には、2 つのボタンを表す 2 つの関数があります。

たとえば、メイン ファイル (*.m) の最初の関数: x=imread('image.bmp');

そして2つめのボタン(2つめの機能、1つめの機能と同じメインファイル)は、1つめのボタンで読み込んだ画像を処理するものです。そのため、プロセスを実行するには、最初のボタン (関数) から変数 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);

% これが私の 2 番目のボタン (機能) です

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」を最初の関数から画像変数として送信し、2 番目の関数で読み取れるようにしたいので、

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

しかし、次のようなエラーメッセージがあります: uicontrol Callback の評価中にエラーが発生しました

??? 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

必要なことをすでに実行しているように見えますが、実際には、2 つのメソッドを並行して使用しているようです。citra1変数をhandles構造体に保存し、pushbutton1_Callbackその構造体を両方のコールバックでユーザー変数として受け入れています。保存handlesしていますguidata

GUI のコールバックguidataの間でデータを共有するを参照して、どちらの場合citra1から抽出するかを確認してくださいhandles

構造を含めてコールバックを正しく設定している場合handles、短い答えは、2 番目のコールバックhandles.citra1だけでなく、代わりに使用することです。citra1ただし、コールバックのドキュメントを読んで、何が起こっているのかを理解することを強くお勧めします。

于 2013-07-13T23:13:35.443 に答える