Увеличение разрешения захвата камеры в OpenCV - PullRequest
52 голосов
/ 18 августа 2008

В моей программе на C / C ++ я использую OpenCV для захвата изображений с моей веб-камеры. Камера ( Logitech QuickCam IM ) может снимать с разрешениями 320x240 , 640x480 и 1280x960 . Но по какой-то странной причине OpenCV выдает мне изображения только с разрешением 320x240 . Вызовы для изменения разрешения с помощью cvSetCaptureProperty () с другими значениями разрешения просто не работают. Как я могу захватывать изображения с другими разрешениями, возможными с моей веб-камерой?

Ответы [ 15 ]

0 голосов
/ 06 июня 2011

cvSetCaptureProperty (захват, CV_CAP_PROP_FRAME_WIDTH, WIDTH);

cvSetCaptureProperty (захват, CV_CAP_PROP_FRAME_HEIGHT, HEIGHT);

cvQueryFrame (захват);

Это не будет работать с OpenCV 2.2, но если вы используете OpenCV 2.1, он будет работать нормально!

0 голосов
/ 21 марта 2011

В Windows попробуйте использовать библиотеку VideoInput: http://robocraft.ru/blog/computervision/420.html

0 голосов
/ 11 ноября 2010

Я считаю, что в Windows (от Win98 до WinXP SP3) OpenCV часто будет использовать библиотеку Microsoft VFW для доступа к камере. Проблема в том, что он часто очень медленный (скажем, максимум 15 кадров в секунду) и глючит (следовательно, почему cvSetCaptureProperty часто не работает). К счастью, вы обычно можете изменить разрешение в другом программном обеспечении (в частности, «AMCAP», которое является легко доступной демонстрационной программой), и это повлияет на разрешение, которое будет использовать OpenCV. Например, вы можете запустить AMCAP, чтобы установить разрешение 640x480, а затем OpenCV будет использовать его по умолчанию с этого момента!

Но если вы можете использовать другую библиотеку доступа к камере Windows, такую ​​как библиотека "videoInput" http://muonics.net/school/spring05/videoInput/, которая обращается к камере с помощью очень эффективного DirectShow (часть DirectX). Или, если у вас камера профессионального качества, то часто она поставляется с пользовательским API, который позволяет вам получить доступ к камере, и вы можете использовать его для быстрого доступа с возможностью изменения разрешения и многих других вещей.

0 голосов
/ 06 октября 2010

Попробуйте это:

capture = cvCreateCameraCapture(-1);
//set resolution
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, frameWidth);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, frameHeight);
0 голосов
/ 19 июня 2010
cvQueryFrame(capture);

cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, any_supported_size );

cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, any_supported_size);

cvQueryFrame(capture);

должно быть достаточно!

...