Этот пример показывает, как использовать функцию GETSNAPSHOT и обеспечивает некоторые советы для эффективного использования. Функция GETSNAPSHOT допускает быстрое приобретение одного кадра видео.
Большая часть взаимодействия с Image Acquisition Toolbox сделана через объект ввода видео. Эти объекты создаются с командой VIDEOINPUT. Этот пример использует веб-камеру, к которой получают доступ через "winvideo" адаптер тулбокса.
vidobj = videoinput('winvideo');
Чтобы получить один кадр, используйте функцию GETSNAPSHOT.
snapshot = getsnapshot(vidobj);
% Display the frame in a figure window.
imagesc(snapshot)
Общая задача состоит в том, чтобы неоднократно получать одно изображение, обрабатывать его, и затем хранить результат. Для этого GETSNAPSHOT может быть назван в цикле.
for i = 1:5 snapshot = getsnapshot(vidobj); imagesc(snapshot); end
Функция GETSNAPSHOT выполняет большую работу, когда это называется. Это должно соединиться с устройством, сконфигурировать его, запустить приобретение, получить один кадр, остановить приобретение, и затем закрыть устройство. Это означает, что приобретение одного кадра может взять значительно дольше, чем ожидалось бы на основе частоты кадров камеры. Чтобы проиллюстрировать это, вызовите GETSNAPSHOT в цикле.
% Measure the time to acquire 20 frames. tic for i = 1:20 snapshot = getsnapshot(vidobj); end elapsedTime = toc % Compute the time per frame and effective frame rate. timePerFrame = elapsedTime/20 effectiveFrameRate = 1/timePerFrame
elapsedTime = 21.2434 timePerFrame = 1.0622 effectiveFrameRate = 0.9415
Следующий пример иллюстрирует более эффективный способ выполнить цикл.
Можно избежать издержек GETSNAPSHOT, описанного в предыдущей установке при помощи ручного режима инициирования объекта videoinput. Ручной режим инициирования позволяет тулбоксу соединяться с и конфигурировать устройство одно время, не регистрируя данные к памяти. Это означает, что кадры могут быть возвращены в MATLAB® с меньшим количеством задержки.
% Configure the object for manual trigger mode. triggerconfig(vidobj, 'manual'); % Now that the device is configured for manual triggering, call START. % This will cause the device to send data back to MATLAB, but will not log % frames to memory at this point. start(vidobj) % Measure the time to acquire 20 frames. tic for i = 1:20 snapshot = getsnapshot(vidobj); end elapsedTime = toc % Compute the time per frame and effective frame rate. timePerFrame = elapsedTime/20 effectiveFrameRate = 1/timePerFrame % Call the STOP function to stop the device. stop(vidobj)
elapsedTime = 1.4811 timePerFrame = 0.0741 effectiveFrameRate = 13.5031
Вы видите, что прошедшее время с помощью ручного инициирования намного меньше, чем предыдущий пример.
Если объект ввода видео больше не необходим, удалите связанную переменную.
delete(vidobj)