Панель инструментов предоставляет три способа перемещения кадров из буфера памяти в рабочую область MATLAB ®:
Удаление нескольких кадров из буфера - чтобы переместить указанное количество кадров из буфера памяти в рабочую область, используйте getdata функция. getdata удаляет кадры из буфера памяти при их перемещении в рабочую область. Функция блокирует командную строку MATLAB до тех пор, пока не будут доступны все запрашиваемые кадры или пока не истечет время ожидания. Дополнительные сведения см. в разделе Перемещение нескольких кадров в рабочую область.
Просмотр последних полученных кадров в буфере - Чтобы поместить последние полученные кадры в буфер памяти в рабочую область, не удаляя их из буфера, используйте peekdata функция. При возврате кадров peekdata начинается с последнего полученного кадра и работает обратно в буфере памяти. Напротив, getdata начинается в начале буфера, возвращая в первую очередь самый старый полученный кадр. peekdata не блокирует командную строку и не гарантирует возврат всех запрашиваемых кадров. Дополнительные сведения см. в разделе Просмотр кадров в буфере памяти.
Ввод одного кадра данных в рабочую область - для удобства панель инструментов предоставляет getsnapshot , которая возвращает один кадр данных в рабочую область MATLAB. Потому что getsnapshot функция не требует запуска объекта или запуска получения, это самый простой способ переноса данных изображения в рабочую область. getsnapshot не зависит от буфера памяти; он может вернуть кадр, даже если буфер памяти пуст, и возвращенный кадр не влияет на значение FramesAvailable собственность. Дополнительные сведения см. в разделе Ввод одного кадра в рабочую область. Пример использования getsnapshotсм. пример Toolbox™ получения изображения «Получение одного изображения в цикле» в списке «Примеры» в верхней части главной страницы центра документации панели инструментов получения изображения или откройте demoimaq_GetSnapshot.m файла в редакторе MATLAB.
Чтобы переместить несколько кадров данных из буфера памяти в рабочую область MATLAB, используйте getdata функция. По умолчанию getdata извлекает количество кадров, указанное в FramesPerTrigger свойство, но можно указать любое число. См. раздел getdata для получения полной информации об этой функции.
Примечание
Когда getdata перемещает кадры из буфера памяти в рабочую область, удаляет кадры из буфера памяти.
На этом рисунке getdata вызывается по T1 с запросом на 15 кадров, но в буфере памяти доступно только шесть кадров. getdata блокирует до тех пор, пока не станет доступным указанное количество кадров, в T2, в какой момент getdata перемещает кадры в рабочее пространство MATLAB и возвращает элемент управления в командную строку.
getdata Blocks до тех пор, пока не станут доступны кадры

В этом примере показано, как можно настроить ориентировочное получение на основе времени с помощью FramesPerTrigger свойство:
Создать объект получения изображения - в этом примере создается объект ввода видео для устройства получения изображения Windows ®. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.
vid = videoinput('winvideo',1);Настройка свойств - чтобы получить 10 секунд данных, определите частоту кадров устройства получения изображений и затем умножьте частоту кадров на количество секунд данных, которые вы хотите получить. Произведением этого умножения является значение FramesPerTrigger собственность.
В этом примере предположим, что частота кадров составляет 30 кадров в секунду (fps). Умножая 30 на 10, необходимо установить FramesPerTrigger значение 300.
vid.FramesPerTrigger = 300;
Запуск объекта сбора изображений - вызовите start для запуска объекта получения изображения.
start(vid)
Объект выполняет немедленный триггер и начинает получение кадров данных. start функция немедленно возвращает управление в командную строку, но объект продолжает регистрировать данные в буфере памяти. После регистрации указанного количества кадров объект прекращает работу.
Поместить полученные данные в рабочую область - чтобы проверить, что вы приобрели необходимый объем данных, используйте дополнительный параметр getdata синтаксис, возвращающий временную метку каждого полученного кадра. Разница между первой и последней отметками времени должна соответствовать ожидаемому объему данных.
[data time] = getdata(vid,300);
elapsed_time = time(300) - time(1)
10.0467Очистить - всегда удалять объекты сбора изображений из памяти и переменные, которые ссылаются на них, когда они больше не нужны.
delete(vid) clear vid
Чтобы просмотреть образцы кадров из буфера памяти без их удаления, используйте peekdata функция.
peekdata функция всегда возвращает последние полученные кадры в буфере памяти. Например, если вы запрашиваете три кадра, peekdata возвращает последний полученный кадр в буфере во время запроса и два кадра, которые непосредственно предшествуют ему.
Следующий рисунок иллюстрирует этот процесс. Команда peekdata(vid,3) вызывается три раза (T1, T2 и T3). Закрашенные кадры указывают кадры, возвращенные peekdata при каждом вызове. (peekdata возвращает кадры, не удаляя их из буфера памяти.)
Обратите внимание на рисунок, что в T3 с момента последнего вызова только два кадра стали доступны peekdata. В этом случае peekdata возвращает только два кадра с предупреждением, что он вернул меньше данных, чем было запрошено.
Кадры, возвращенные с помощью peekdata

Примечание
peekdata функция не возвращает данные во время работы в режиме записи на диск.
Следующий пример иллюстрирует использование peekdata:
Создание объекта получения изображения - в этом примере создается объект ввода видео для устройства получения изображения Data Translation ®. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.
vid = videoinput('dt',1);Настроить свойства - для этого примера настройте ручной триггер. Необходимо использовать triggerconfig для указания типа триггера.
triggerconfig(vid,'manual')
Кроме того, сконфигурируйте достаточно большой сбор данных, чтобы разрешить несколько вызовов peekdata до того, как он закончит.
vid.FramesPerTrigger = 300;
Запуск объекта сбора изображений - вызовите start для запуска объекта получения изображения.
start(vid)
Видеообъект сейчас запущен, но не заносится в журнал.
isrunning(vid)
ans =
1
islogging(vid)
ans =
0Используйте peekdata для просмотра кадров перед триггером - при вызове peekdata прежде чем инициировать приобретение, peekdata может возвращать только один кадр данных, поскольку регистрация данных не инициирована и буфер памяти пуст. Если запрашивается более одного кадра, peekdata выдает предупреждение о том, что он возвращает меньше запрошенного количества кадров.
pdata = peekdata(vid,50); Warning: PEEKDATA could not return all the frames requested.
Убедитесь, что peekdata возвратил один кадр. Один кадр данных должен иметь такую же ширину и высоту, как указано в ROIPosition и то же количество полос, как указано в NumberOfBands собственность. В этом примере формат видео данных RGB, поэтому значение NumberOfBands свойство равно 3.
whos Name Size Bytes Class pdata 96x128x3 36864 uint8 array vid 1x1 1060 videoinput object
Убедитесь, что объект не получил ни одного кадра.
vid.FramesAcquired ans = 0
Инициируйте получение - вызовите trigger функция инициирует получение.
trigger(vid)
Объект начинает запись кадров в буфер памяти.
Просмотр последних полученных кадров. Во время получения вызова peekdata несколько раз для просмотра последних кадров в буфере памяти. В зависимости от количества запрашиваемых кадров и времени выполнения этих запросов, peekdata может возвращать меньше указанного количества кадров.
pdata = peekdata(vid,50);
Чтобы проверить, что peekdata вернул запрошенные кадры, проверьте размеры pdata. peekdata возвращает четырехмерный массив кадров, где последнее измерение указывает количество возвращенных кадров.
whos
Name Size Bytes Class
pdata 4-D 1843200 uint8 array
vid 1x1 1060 videoinput object
size(pdata)
ans =
96 128 3 50Очистить - всегда удалять объекты сбора изображений из памяти и переменные, которые ссылаются на них, когда они больше не нужны.
delete(vid) clear vid
Чтобы поместить один кадр данных изображения в рабочую область MATLAB, используйте getsnapshot функция. Вы можете позвонить getsnapshot в любое время после создания объекта.
В этом примере показано, как просто использовать getsnapshot функция.
Создать объект получения изображения - в этом примере создается объект ввода видео для устройства Matrox ®. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.
vid = videoinput('matrox',1);Поместить кадр в рабочее пространство - вызовите getsnapshot для ввода кадра в рабочую область. Обратите внимание, что перед вызовом getsnapshot функция.
frame = getsnapshot(vid);
getsnapshot функция возвращает изображение с такой же шириной и высотой, как указано в ROIPosition и столько же полос, как указано в NumberOfBands собственность. В этом примере формат видео данных RGB, поэтому значение NumberOfBands свойство равно 3.
whos Name Size Bytes Class frame 96x128x3 36864 uint8 array vid 1x1 1060 videoinput object
Обратите внимание, что кадр, возвращенный getsnapshot не удаляется из буфера памяти, если кадры хранятся там, и не влияет на значение FramesAvailable собственность.
Очистить - всегда удалять объекты сбора изображений из памяти и переменные, которые ссылаются на них, когда они больше не нужны.
delete(vid) clear vid
Пример использования getsnapshot, см. пример «Получение одного изображения в цикле» в списке «Примеры» в верхней части главной страницы «Центр документации» или откройте demoimaq_GetSnapshot.m файла в редакторе MATLAB.