В этом примере показано, как использовать функцию GETSNAPSHOT. Функция GETSNAPSHOT позволяет быстро получить один видеокадр.
Большая часть взаимодействия с инструментарием получения изображений осуществляется через объект ввода видео. Эти объекты создаются с помощью команды 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, описанных в предыдущем параметре, с помощью ручного режима запуска объекта видеоинтерфейса. Ручной режим запуска позволяет панели инструментов подключаться к устройству и конфигурировать его один раз без регистрации данных в памяти. Это означает, что кадры могут быть возвращены в 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)