Прежде чем можно будет получить данные из устройства, необходимо сказать механизму формат данных, которые это может ожидать получать от устройства. Без этой информации механизм не знает, как интерпретировать данные. Например, механизм должен знать, что размер байтов раньше хранил данные изображения, длину каждой строки и общее количество строк в каждом фрейме изображения, и количество плоскостей или полосы, в каждом фрейме изображения. (например, данные о RGB имеют три полосы). Следующая фигура иллюстрирует эту информацию.
В некоторых случаях эти данные о формате определяются внешними стандартами, такими как стандарт RS-170/NTSC. В других случаях поставщики устройства задают много различных форматов, описанных в документации, которая идет с устройством. Средства записи адаптера решают, какой из этих поддерживаемых форматов они хотят сделать доступным для пользователей своего адаптера в их функции getAvailHW()
, описанной в Хранении Данных о формате.
В этом разделе описывается вы задаете данные о формате в своем адаптере после использования виртуальных функций класса адаптера.
Вы задаете размерности данных изображения устройство выходные параметры с помощью следующих виртуальных функций.
getMaxHeight()
— Возвращает целое число, которое задает максимальную высоту данных изображения.
getMaxWidth()
— Возвращает целое число, которое задает максимальную ширину данных изображения.
getNumberOfBands()
— Возвращает целое число, которое задает количество размерностей в данных. Например, форматы RGB используют три полосы.
Механизм вызывает эти функции в вашем адаптере, чтобы получить информацию разрешения, которую это отображает в свойстве VideoResolution
объекта ввода видео.
vid = videoinput('mydeviceimaq'); get(vid,'VideoResolution') ans = 640 480
Ваш адаптер также вызывает эти функции, когда он создает объект IAdaptorFrame
получить данные изображения. Смотрите Реализацию Функции Потока Приобретения для получения дополнительной информации.
getMaxHeight()
, getMaxWidth()
и функции getNumberOfBands()
в адаптере обычно выполняют следующую обработку:
Определите формат, заданный пользователем, когда они создали объект ввода видео. Механизм передает эту информацию в качестве аргумента к функции createInstance()
вашего адаптера.
На основе выбранного формата возвратите соответствующие значения высоты, ширины или количества полос. Ваш адаптер может выполнить это во многих отношениях. Один путь, проиллюстрированный демонстрационным адаптером, состоит в том, чтобы решить, что эти значения в вашем getAvailHW()
функционируют и хранят информацию в данных приложения в объекте IDeviceFormat
— смотрите Классы Определения, чтобы Содержать Специфичную для устройства информацию. Затем getMaxHeight()
, getMaxWidth()
и функции getNumberOfBands()
могут получить эти данные приложения и считать эти значения.
Следующие реализации getMaxHeight()
и функций getMaxWidth()
определяют значение на основе формата, заданного пользователем. Количество полос зависит от того, является ли формат цветом или монохромом. Для цветных форматов, таких как RGB и YUV, количество полос всегда равняется 3. Для монохрома (черный и белый) форматы, количество полос всегда равняется 1. Программное обеспечение Image Acquisition Toolbox™ только поддерживает данные изображения с 1 или 3 полосами.
Замените тупиковые реализации в адаптере в качестве примера со следующим кодом файл C++, mydevice.cpp
, созданный в Главе 3. Значения подходят для имен формата, заданных в примере в Определении Информации об устройстве и Данных о формате.
int MyDeviceAdaptor::getMaxHeight() const{ if(strcmp(_formatName,"RS170"){ return 480; } else { return 576; } int MyDeviceAdaptor::getMaxWidth() const { if(strcmp(_formatName,"RS170"){ return 640; } else { return 768; } } int MyDeviceAdaptor::getNumberOfBands() const { return 1; }
В дополнение к размерностям фрейма изображения необходимо предоставить механизму информацию о байтовой структуре данных изображения. Байтовая структура включает количество битов, используемых, чтобы представлять пиксельные значения, подписываются ли данные или без знака, порядок байтов данных, и отправляет ли устройство нижний ряд сначала.
Чтобы указать эту информацию, необходимо выбрать одно из перечислений FRAMETYPE
, заданных набором адаптера. Набор адаптера задает перечисления для многих различных типов кадра, чтобы представлять большое разнообразие форматов, поддержанных устройствами. Например, если ваше устройство является монохромом (черный и белый) устройство, которое возвращает 8-битные данные, вы можете выбрать тип кадра MONO8
. Если ваше устройство является цветным устройством, которое возвращает 24-битные данные, вы можете выбрать тип кадра RGB24
. Следующая таблица обобщает типы кадра, которые доступны. Чтобы выбрать определенный формат, просмотрите список в Справочной документации API Набора Адаптера Image Acquisition Toolbox или откройте файл AdaptorFrameTypes.h
.
Формат | Структурируйте типы |
---|---|
Монохром | 8-, 10-, 12-, и 16-битные форматы; и и обратный порядок байтов с прямым порядком байтов; в регулярных и зеркально отраженных форматах. (В зеркально отраженных форматах устройство обеспечивает нижнюю строку сначала.) |
| Подписанный 16-и 32-битные форматы; и и обратный порядок байтов с прямым порядком байтов; в регулярных и зеркально отраженных форматах. |
| И двойные форматы с плавающей точкой; и форматы с обратным порядком байтов и с прямым порядком байтов; в регулярных и зеркально отраженных форматах. |
Цвет | 8-, 24-, 32-, и 48-битные форматы RGB; и и обратный порядок байтов с прямым порядком байтов; регулярный и зеркально отраженный; упакованный и плоский (см. Понимание Упакованные и Плоские Форматы). |
| Структурируйте типы, которые задают порядок байтов цветных данных (RGB или GBR) и задают, где пустой байт расположен (XRGB или XGBR). |
| Форматы, которые представляют, раскрашивают 4 бита (4444), 5 битов (555), 5-или 6 битов (565) или 10 битов (101010). |
| Форматы, которые используют цветовое пространство YUV. |
Функция getFrameType()
вашего адаптера должна возвратить соответствующий тип кадра, который описывает данные, возвращенные вашим устройством для заданного формата.
Если ваше устройство поддерживает несколько цветных форматов, вы не должны представлять все форматы пользователям тулбокса. Можно просто обеспечить один цветной формат и обработать низкоуровневые детали в адаптере с FRAMETYPE
.
Следующий пример показывает скелетную реализацию функции getFrameType()
. Фактическая реализация может выбрать тип кадра на основе формата, который выбрал пользователь.
virtual imaqkit::frametypes::FRAMETYPE getFrameType() const { return imaqkit::frametypes::FRAMETYPE:MONO8; }
Набор адаптера класс IAdaptorFrame
задает много перечислений FRAMETYPE
, которые покрывают много возможных типов устройств данных изображения, может возвратиться. Например, некоторые устройства могут возвратить цветные изображения в упакованном или не упаковали (плоские) форматы. Эти форматы описывают, как байты красных, зеленых, и синих данных располагаются в памяти. В упакованных форматах группируются красные, зеленые, и синие триплеты. В неупакованных форматах все красные данные хранятся вместе, сопровождаемые всеми зелеными данными, сопровождаемыми всеми синими данными. Следующая фигура иллюстрирует это различие.
Упакованные и плоские форматы
Чтобы получить больше информации о форматах видео, перейдите к веб-сайту fourcc.org
.