Как установить формат BGR24 с помощью OpenCv?

У меня есть камера V4L2, которая может захватывать кадры в формате JPEG или YUV422 или BGR24. Я хотел бы установить камеру на BGR24 @ 640x480 с помощью OpenCV. Для этого я сделал следующие настройки:

capture = cvCreateCameraCapture(0);
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 640 );
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 480 );
cvSetCaptureProperty( capture, CV_CAP_PROP_FOURCC, CV_FOURCC('B', 'G', 'R', '3'));  

но opencv возвращает мне следующее сообщение об ошибке:

HIGHGUI ERROR: V4L: Property <unknown property string>(6) not supported by device

Итак, openCV установил формат JPEG@640x480 вместо BGR24. Как я могу это исправить?

ПРИМЕЧАНИЕ. Формат BGR24 был протестирован со следующим конвейером gstreamer и работает правильно:

gst-launch-0.10 v4l2src num-buffers=10 device=/dev/video0 ! 'video/x-raw-rgb,width=640,height=480,bpp=24,depth=24,red_mask=255,green_mask=65280,blue_mask=16711680,endianness=4321' ! filesink location=/tmp/output10.rgb24

С уважением


person aldo85ita    schedule 07.11.2012    source источник


Ответы (1)


Я бы проверил, что вы обращаетесь к правильной камере

Если у вас несколько камер, переменный N в cvCreateCameraCapture(N) должен циклически переключаться между ними.

Кроме этого, я бы проверил, соответствует ли сама веб-камера спецификации UVC. У V4L могут возникнуть проблемы с запросом параметров камеры.

Просто потому, что камера поддерживает захват определенного формата, если он не строго соответствует классу USB-видео, OpenCV не гарантирует, что сможет определить, что он может захватывать в этом формате, и, насколько мне известно, нельзя заставить.

person Totero    schedule 07.11.2012
comment
Спасибо @Totero, я обязательно использую /dev/video0, потому что у меня нет другой подключенной камеры. Моя камера V4L2 не основана на UVC, потому что я создал для нее драйвер (это не USB-камера, она основана на интерфейсе камеры микроконтроллера). Вы уверены, что CV_CAP_PROP_FOURCC вызывает стандартные настройки UVC (а не ioctl V4L2)? - person aldo85ita; 07.11.2012
comment
Для USB-устройств V4L2 вызывает UVC (kernel.org/doc/Documentation/video4linux /uvcvideo.txt) - person Totero; 07.11.2012
comment
Но видя, что ваша камера не USB - плохое предположение с моей стороны ... Тогда я бы сказал, что между V4L и вашим пользовательским драйвером есть определенная проблема. Ваш код openCV правильный. Возможно, вам следует перепостить вопрос как проблему с драйвером (здесь и в стеке dsp), возможно, кто-то уже сталкивался с этой проблемой. - person Totero; 07.11.2012
comment
V4L2 должен быть более универсальным, чем UVC: он может работать с разными типами камер (не только с USB). UVC — это только подуровень V4L2, и он может работать только с USB. - person aldo85ita; 07.11.2012
comment
да. Это верно. Еще раз прошу прощения за то, что предположил, что ваша камера USB. Но в своем комментарии я указал «Для USB-устройств». Я бы определенно опубликовал этот вопрос как вопрос о пользовательских драйверах и V4L. Здесь нет проблемы с OpenCV. - person Totero; 07.11.2012