2012-05-27 77 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