Тулбокс обеспечивает три способа переместить кадры от буфера памяти в рабочую область MATLAB®:
При удалении нескольких кадров из буфера — Чтобы переместить конкретное количество кадров от буфера памяти в рабочую область, используйте функцию getdata
. Функция getdata
удаляет кадры из буфера памяти, когда это перемещает их в рабочую область. Функциональные блоки командная строка MATLAB до всех требуемых кадров доступна, или до значения тайм-аута, истекают. Для получения дополнительной информации смотрите Перемещение Нескольких Кадров в Рабочую область.
При просмотре последний раз полученных кадров в буфере — Чтобы принести последний раз полученные кадры в буфере памяти в рабочую область, не удаляя их из буфера, используйте функцию peekdata
. При возврате кадров peekdata
запускается с последний раз полученного кадра и работает назад в буфере памяти. Напротив, getdata
запускается в начале буфера, возвращая самый старый полученный кадр сначала. peekdata
не блокирует командную строку и, как гарантируют, не возвратит все кадры, которые вы запрашиваете. Для получения дополнительной информации смотрите Кадры Просмотра в Буфере памяти.
Принося один кадр данных в рабочую область — Как удобство, тулбокс обеспечивает функцию getsnapshot
, которая возвращает один кадр данных в рабочее пространство MATLAB. Поскольку функция getsnapshot
не требует запуска объекта или инициирования приобретения, это - самый легкий способ принести данные изображения в рабочую область. getsnapshot
независим от буфера памяти; это может возвратить кадр, даже если буфер памяти пуст, и возвращенный кадр не влияет на значение свойства FramesAvailable
. Для получения дополнительной информации смотрите Обеспечение Одного Кадра в Рабочую область. Для примера использования getsnapshot
смотрите, что пример Image Acquisition Toolbox™ Получает Одно Изображение в Цикле в списке Examples наверху Image Acquisition Toolbox основная страница Documentation Center или откройте файл demoimaq_GetSnapshot.m в редакторе MATLAB.
Чтобы переместить несколько кадров данных из буфера памяти в рабочее пространство MATLAB, используйте функцию getdata
. По умолчанию getdata
получает количество кадров, заданных в свойстве FramesPerTrigger
, но можно задать любой номер. Смотрите страницу с описанием getdata
для полной информации об этой функции.
Когда getdata
функционирует кадры перемещений от буфера памяти в рабочую область, это удаляет кадры из буфера памяти.
В этой фигуре в getdata
заходят T1 с запросом о 15 кадрах, но только шесть кадров доступны в буфере памяти. блоки getdata
до конкретного количества кадров становятся доступными в T2, в которой точке getdata
перемещает кадры в рабочее пространство MATLAB и возвращает управление в командную строку.
Блоки getdata До Кадров Становятся Доступными
Этот пример показывает, как можно сконфигурировать аппроксимированное основанное на времени приобретение с помощью свойства FramesPerTrigger
:
Создайте объект получения изображений — Этот пример создает объект ввода видео для устройства получения изображений Windows®. Чтобы запустить этот пример в вашей системе, используйте функцию imaqhwinfo
, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.
vid = videoinput('winvideo',1);
Сконфигурируйте свойства — Чтобы получить 10 секунд данных, определить частоту кадров вашего устройства получения изображений и затем умножить частоту кадров на номер секунд данных, которые вы хотите получить. Продуктом этого умножения является значение свойства FramesPerTrigger
.
В данном примере примите частоту кадров 30 кадров в секунду (фут в секунду). Умножаясь 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
, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.
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
, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.
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
смотрите, что пример Image Acquisition Toolbox Получает Одно Изображение в Цикле в списке Examples наверху Image Acquisition Toolbox основная страница Documentation Center или откройте файл demoimaq_GetSnapshot.m в редакторе MATLAB.