Getting snapshot from webcam in Matlab

让人想犯罪 __ 提交于 2019-12-24 16:08:06

问题


I have created a simple GUI to preview webcam stream and to get snapshot from it. For this I have created on axes to show video, one push button(pushbutton1) to start preview, one push button(pushbutton2) to get snapshot. Following is the code for these two push buttons.

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);

In pushbutton2_Callback I am trying to get child of axes ie. vidObj. But this gives me error ??? Undefined function or method 'getsnapshot' for input arguments of type 'double'.. Why is it returing double type instead of child object vidObj? How can I fix it and get snapshot? Is there any other better way? (I just started learning GUI.) Thanks.


回答1:


A better alternative to declaring your variables global, is to use the handles structure for sharing data. GUIDE already uses this structure to store handles to all GUI components. Simply add your data as a field to this structure that gets passed around to all callback functions.

So inside the first callback:

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

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

Then in the second, you can retrieve the video object from the handles structure:

function pushbutton2_Callback(hObject, eventdata, handles)
    frame = getsnapshot(handles.vidObj);
    imshow(frame);
end


来源:https://stackoverflow.com/questions/10772099/getting-snapshot-from-webcam-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!