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

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