Прежде чем вы сможете получить данные с вашего устройства, вы должны сообщить движку формат данных, которые он может ожидать получить с вашего устройства. Без этой информации механизм не знает, как интерпретировать данные. Для примера механизм должен знать размер байтов, используемых для хранения данных изображения, длину каждой линии и общее количество линий в каждой системе координат изображения и количество плоскостей или полос в каждой системе координат изображения. (например, данные RGB имеют три полосы). Следующие рисунки иллюстрируют эту информацию.
В некоторых случаях эта информация о формате определяется внешними стандартами, такими как стандарт RS-170/NTSC. В других случаях поставщики устройств определяют много различных форматов, описанных в документации, которая поставляется с устройством. Адаптер средств записи решить, какой из этих поддерживаемых форматов они хотят сделать доступным для пользователей своего адаптера в своей getAvailHW()
функция, описанная в разделе Информация о формате хранения.
В этом разделе описывается, как вы задаете информацию о формате в вашем адаптере после использования виртуальных функций класса адаптера.
Вы задаете размерности данных выводит с помощью следующих виртуальных функций.
getMaxHeight()
- Возвращает целое число, которое задает максимальную высоту данных изображения.
getMaxWidth()
- Возвращает целое число, которое задает максимальную ширину данных изображения.
getNumberOfBands()
- Возвращает целое число, которое задает количество размерностей в данных. Например, форматы RGB используют три полосы.
Механизм вызывает эти функции в вашем адаптере, чтобы получить информацию о разрешении, которую он отображает в VideoResolution
свойство объекта входа видео.
vid = videoinput('mydeviceimaq'); get(vid,'VideoResolution') ans = 640 480
Ваш адаптер также вызывает эти функции, когда он создает IAdaptorFrame
объект для приема данных изображения. Для получения дополнительной информации см. раздел «Реализация функции потока сбора».
The 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
тип системы координат. В следующей таблице представлены доступные типы систем координат. Чтобы выбрать определенный формат, просмотрите список в документации Image Acquisition Toolbox Adaptor Kit API Reference или откройте 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
Веб-сайт.