1

ウェブカメラ ストリームをプレビューし、そこからスナップショットを取得するためのシンプルな GUI を作成しました。このために、ビデオを表示するための軸、プレビューを開始するための 1 つのプッシュ ボタン (pushbutton1)、スナップショットを取得するための 1 つのプッシュ ボタン (pushbutton2) を作成しました。以下は、これら 2 つのプッシュ ボタンのコードです。

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)
axes(handles.axes1);
vidObj = videoinput('winvideo',1);
videoRes = get(vidObj, 'VideoResolution');
numberOfBands = get(vidObj, 'NumberOfBands');
handleToImage = image( zeros([videoRes(2), videoRes(1), numberOfBands], 'uint8') );
preview(vidObj, handleToImage);


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
a=getsnapshot(get(axes,'Children'));
imshow(a);

pushbutton2_Callback では、軸の子を取得しようとしています。vidObj. しかし、これは私にエラーを与えます??? Undefined function or method 'getsnapshot' for input arguments of type 'double'.。子オブジェクトの代わりに double 型を返すのはなぜvidObjですか? どうすれば修正してスナップショットを取得できますか? 他に良い方法はありますか?(GUI の学習を始めたばかりです。) ありがとうございます。

4

1 に答える 1

2

変数をグローバルに宣言する代わりに、handles構造体を使用してデータを共有することをお勧めします。GUIDE は既にこの構造体を使用して、すべての GUI コンポーネントへのハンドルを格納しています。この構造体にフィールドとしてデータを追加するだけで、すべてのコールバック関数に渡されます。

したがって、最初のコールバック内では次のようになります。

function pushbutton1_Callback(hObject, eventdata, handles)
    %# ... your existing code ...

    %# store video object in handles, and persist
    handles.vidObj = vidObj;
    guidata(hObject,handles)
end

次に、handles構造体からビデオ オブジェクトを取得できます。

function pushbutton2_Callback(hObject, eventdata, handles)
    frame = getsnapshot(handles.vidObj);
    imshow(frame);
end
于 2012-06-09T16:47:04.360 に答える