Решение проблемы низкой FPS на некоторых USB камерах / OpenCV / Recog.ru - Распознавание образов для программистов


Решение проблемы низкой FPS на некоторых USB камерах

Столкнулся с проблемой в Windows, что камеры на новых ноутбуках и некоторые новые камеры при разрешениях выше 640x480 дают низкое значение FPS использованием видеопотока OpenCV (неважно Си или Си++ интерфейс).
В моем случае было 3 камеры (2 внешние и одна ноутбука), которые ставили разрешение 1280x760, но только одна при этом давала 30 FPS, остальные две камеры давали значение 10 FPS.

Естественно первая идея — установить FPS с помощью CV_CAP_PROP_FPS, но оно не работает для камер. Тогда пришлось смотреть исходники OpenCV и выяснять в каких режимах работает камера.
Работа с камерой в Windows реализована в cap_dshow.cpp. Там, в
videoInput::videoInput()
определены режимы камер в массиве mediaSubtypes

Вот такие стандартные режимы
mediaSubtypes[0] = MEDIASUBTYPE_RGB24;
mediaSubtypes[1] = MEDIASUBTYPE_RGB32;
mediaSubtypes[2] = MEDIASUBTYPE_RGB555;
mediaSubtypes[3] = MEDIASUBTYPE_RGB565;
mediaSubtypes[4] = MEDIASUBTYPE_YUY2;
mediaSubtypes[5] = MEDIASUBTYPE_YVYU;
mediaSubtypes[6] = MEDIASUBTYPE_YUYV;
mediaSubtypes[7] = MEDIASUBTYPE_IYUV;
mediaSubtypes[8] = MEDIASUBTYPE_UYVY;
mediaSubtypes[9] = MEDIASUBTYPE_YV12;
mediaSubtypes[10] = MEDIASUBTYPE_YVU9;
mediaSubtypes[11] = MEDIASUBTYPE_Y411;
mediaSubtypes[12] = MEDIASUBTYPE_Y41P;
mediaSubtypes[13] = MEDIASUBTYPE_Y211;
mediaSubtypes[14] = MEDIASUBTYPE_AYUV;
mediaSubtypes[15] = MEDIASUBTYPE_MJPG; // MGB

По сути последовательно идет попытка установить первый рабочий режим. Оказалось, что камеры выбрали следующие режимы:
Камера 1 USB MEDIASUBTYPE_RGB24
Камера 2 USB MEDIASUBTYPE_YUY2
Камера 3 ноутбучная MEDIASUBTYPE_YUY2
Только камера 1 работала нормально — 30 FPS. Путем нехитрого эксперимента было выяснено, что если бы режим MEDIASUBTYPE_MJPG шел впереди MEDIASUBTYPE_YUY2, то камера бы выдавала нужные 30 FPS. Поэтому все, что нужно было сделать это поднять в массиве MEDIASUBTYPE_MJPG над MEDIASUBTYPE_YUY2.
После этого, откомпилировав библиотеку, получился нормальный результат 30 FPS для всех камер и теперь они работали
Камера 1 USB MEDIASUBTYPE_RGB24
Камера 2 USB MEDIASUBTYPE_MJPG
Камера 3 ноутбучная MEDIASUBTYPE_MJPG
  • 0
  • 21 июня 2016, 14:10
  • vidikon

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.