2012-05-27 121 views
1

我已經創建了一個簡單的GUI來預覽攝像頭流並從中獲取快照。爲此,我在軸上創建了視頻,一個按鈕(按鈕1)開始預覽,一個按鈕(按鈕2)獲取快照。以下是這兩個按鈕的代碼。從Matlab攝像頭獲取快照在

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我試圖讓孩子的軸即ie。 vidObj。但是這給我錯誤??? Undefined function or method 'getsnapshot' for input arguments of type 'double'.。爲什麼它回覆雙重類型而不是子對象vidObj? 我該如何解決它並獲得快照? 還有其他更好的方法嗎? (我剛開始學習GUI。) 謝謝。

+1

問題通過聲明'vidObj'全球解決。 –

+3

如果您有針對您的問題的解決方案,請在回答中回答您的問題並接受它。這樣,其他用戶可以從答案中受益,並將問題正確標記爲已解決。謝謝! – jpjacobs

回答

2

聲明變量爲全局變量的更好方法是對sharing data使用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