Matlab GUI和函数编程

时间:2011-03-30 16:20:31

标签: matlab

我是Matlab的新手,并试图在Matlab中编写一个GUI,它将在我的笔记本电脑上显示一个小窗口中的网络摄像头。我正在尝试创建一个功能,当按下启动按钮时它将启动网络摄像头我已经完成但同时我想要拍摄快照5秒钟并在我的主窗口中显示图像。我需要帮助。还要如何将数字大小设置为更大的数字。下面是我的Matlab代码

% Create a video input object.
vid = videoinput('winvideo');

% Create a figure window. This example turns off the default
% toolbar and menubar in the figure.
hFig = figure('Toolbar','none',...
       'Menubar', 'none',...
       'NumberTitle','Off',...
       'Name','LegoBot');




% Set up the push buttons
uicontrol('String', 'Start Preview',...
    'Callback', 'preview(vid)',...
    'Units','normalized',...
    'Position',[0 0 0.15 .07]);
uicontrol('String', 'Stop Preview',...
    'Callback', 'stoppreview(vid)',...
    'Units','normalized',...
    'Position',[.17 0 .15 .07]);
uicontrol('String', 'Close',...
    'Callback', 'close(gcf)',...
    'Units','normalized',...
    'Position',[0.34 0 .15 .07]);



% Create the text label for the timestamp
hTextLabel = uicontrol('style','text','String','Timestamp', ...
    'Units','normalized',...
    'Position',[0.85 -.04 .15 .08]);

% Create the image object in which you want to
% display the video preview data.
vidRes = get(vid, 'VideoResolution');
imWidth = vidRes(1);
imHeight = vidRes(2);
nBands = get(vid, 'NumberOfBands');
hImage = image( zeros(imHeight, imWidth, nBands) );

% Specify the size of the axes that contains the image object
% so that it displays the image at the right resolution and
% centers it in the figure window.
figSize = get(hFig,'Position');
figWidth = figSize(7);
figHeight = figSize(8);
set(gca,'unit','pixels',...
        'position',[ ((figWidth - imWidth)/2)... 
                     ((figHeight - imHeight)/2)...
                       imWidth imHeight ]);

% Set up the update preview window function.
setappdata(hImage,'UpdatePreviewWindowFcn',@mypreview_fcn);

% Make handle to text label available to update function.
setappdata(hImage,'HandleToTimestampLabel',hTextLabel);

preview(vid, hImage);

2 个答案:

答案 0 :(得分:0)

我同意之前的评论,关于使用指南,我还建议使用数据计算工具箱,就像有人在这里做DAQ Matlab Webcam并尝试编写代码,在这种情况下你可以循环到按照您想要的时间间隔收集数据。

希望有所帮助,

答案 1 :(得分:0)

好笑,我今天早上刚刚编写代码来处理这个问题。你必须添加自己的逻辑来退出循环,但这应该适合你。

% Initialize variables
objects = imaqfind; delete(objects); clear objects
cameraOn = true; %Loop initialization
counter = 0;
fileName = 'OutputFile';

%Initialize Webcam Object
vid = videoinput('winvideo');
src = getselectedsource(vid);
get(src);

% Configure Camera
vid = videoinput('winvideo', 1, 'MJPG_640x480'); %Gotten from imaqtool
src = getselectedsource(vid);
triggerconfig(vid, 'manual');
src.ExposureMode = 'manual'; %Speeds up webcam to max
src.BacklightCompensation = 'off'; %Speeds up webcam to max

% Call Preview Window
vid = videoinput('winvideo',1);
preview(vid)

% Begin snapshot collection
while cameraOn == true;
for ii = 5:-1:1
    display([num2str(ii)]); %Display a countdown
    pause(1);
end
snapshot = getsnapshot(vid); %Collect video frame
counter=counter+1;
imwrite(snapshot,[fileName,num2str(counter,3),'.png'],'png');
end

% Stop previewing video data.
stoppreview(vid);

delete(vid); clear vid