Программирование в Matlab GUI и Функции - PullRequest
2 голосов
/ 30 марта 2011

Я новичок в Matlab и пытаюсь запрограммировать графический интерфейс в Matlab, который будет отображать веб-камеру, установленную на моем ноутбуке, в небольшом окне. Я пытаюсь создать функцию, при которой при нажатии кнопки запуска запускается веб-камера в котором я сделал, но в то же время я хочу сделать снимок каждые 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 голосов
/ 07 сентября 2013

Забавно, я только что написал код этим утром, чтобы справиться с этим.Вы должны будете добавить свою собственную логику, чтобы выйти из цикла, но это должно работать для вас.

% 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
0 голосов
/ 07 августа 2011

Я согласен с предыдущими комментариями по поводу использования Руководства, я бы также рекомендовал использовать набор инструментов для сбора данных, как это сделал кто-то здесь DAQ Matlab Webcam , и попробуйте написать свой код вокруг этого, в этом случае вы могли бысделайте цикл для сбора данных в нужные промежутки времени.

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...