exponenta event banner

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

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