在Matlab中从网络摄像机获取快照

在Matlab中从网络摄像机获取快照,matlab,user-interface,scope,video-capture,matlab-guide,Matlab,User Interface,Scope,Video Capture,Matlab Guide,我创建了一个简单的GUI来预览网络摄像头流并从中获取快照。为此,我在轴上创建了显示视频的按钮,一个按钮(按钮1)用于开始预览,一个按钮(按钮2)用于获取快照。以下是这两个按钮的代码 function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future vers

我创建了一个简单的GUI来预览网络摄像头流并从中获取快照。为此,我在轴上创建了显示视频的按钮,一个按钮(按钮1)用于开始预览,一个按钮(按钮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\u回调中,我试图获取轴的子对象,即
vidObj
。但这给了我错误
???“double”类型的输入参数的未定义函数或方法“getsnapshot”。
。为什么它要返回双精度类型而不是子对象
vidObj
? 如何修复它并获取快照? 还有其他更好的办法吗? (我刚开始学习GUI。)
谢谢。

将变量声明为全局变量的更好的替代方法是使用
句柄
结构。指南已经使用此结构来存储所有GUI组件的句柄。只需将数据作为字段添加到此结构中,然后传递给所有回调函数

所以在第一次回调中:

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

    %# store video object in handles, and persist
    handles.vidObj = vidObj;
    guidata(hObject,handles)
end
然后在第二种情况下,您可以从
句柄
结构中检索视频对象:

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

通过声明
vidObj
global解决问题。如果您有问题的解决方案,请在回答中回答您的问题并接受它。这样其他用户可以从答案中受益,并且问题被正确地标记为已解决。谢谢