Получение одиночного изображения в цикле

В этом примере показано, как использовать функцию 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)