Как установить FPS камеры в OpenCV? CV_CAP_PROP_FPS - подделка
Как настроить камеру FPS?
Может быть cvSetCaptureProperty(cameraCapture, CV_CAP_PROP_FPS, 30);?
Но возвращается HIGHGUI ERROR: V4L2: невозможно получить свойство (5) - неверный аргумент
Потому что в highgui/cap_v4l.cpp нет реализации
static int icvSetPropertyCAM_V4L( CvCaptureCAM_V4L* capture,
int property_id, double value ){
static int width = 0, height = 0;
int retval;
/* initialization */
retval = 0;
/* two subsequent calls setting WIDTH and HEIGHT will change
the video size */
/* the first one will return an error, though. */
switch (property_id) {
case CV_CAP_PROP_FRAME_WIDTH:
width = cvRound(value);
if(width !=0 && height != 0) {
retval = icvSetVideoSize( capture, width, height);
width = height = 0;
}
break;
case CV_CAP_PROP_FRAME_HEIGHT:
height = cvRound(value);
if(width !=0 && height != 0) {
retval = icvSetVideoSize( capture, width, height);
width = height = 0;
}
break;
case CV_CAP_PROP_BRIGHTNESS:
case CV_CAP_PROP_CONTRAST:
case CV_CAP_PROP_SATURATION:
case CV_CAP_PROP_HUE:
case CV_CAP_PROP_GAIN:
case CV_CAP_PROP_EXPOSURE:
retval = icvSetControl(capture, property_id, value);
break;
default:
fprintf(stderr,
"HIGHGUI ERROR: V4L: setting property #%d is not supported\n",
property_id);
}
/* return the the status */
return retval;
}
Как это решить?
4 ответа
Используя обертки python для opencv, я работал, чтобы ссылаться на переменную как:
cap = cv2.VideoCapture(1)
cap.set(cv2.cv.CV_CAP_PROP_FPS, 60)
Я использую Python 2.7.3 и OpenCV 2.4.8
Камера PS3 Eye
Я не знаю, действительно ли это все еще верно, но некоторое время назад, примерно через полтора года, я столкнулся именно с этой проблемой. Я связался с разработчиком OpenCV, и он сказал мне, что доступ и возможность изменять некоторые свойства захвата еще не реализованы, а некоторые другие просто работают для определенных типов камер. Наконец, я взглянул на libdc1394 (работающий в linux) и сделал несколько функций, которые конвертировали данные, полученные libdc1394, в IplImages из OpenCV. Это не было такой сложной задачей.
CV_CAP_PROP_FPS НЕ является подделкой. Смотрите cap_libv4l.cpp ( 1) в репозитории OpenCV github. Ключ должен убедиться, что вы используете libv4l поверх v4l при настройке OpenCV. Для этого перед запуском cmake установите libv4l-dev
sudo apt-get install libv4l-dev
Теперь при настройке OpenCV с помощью cmake, включите опцию, WITH_LIBV4L
, Если все пойдет хорошо, в состоянии конфигурации вы увидите нечто похожее на
V4L/V4L2: Использование libv4l1 (версия) / libv4l2 (версия)
И затем при сборке вашего кода OpenCV вам нужно будет связать с libv4l1/libv4l2/libv4lconvert.
Произвольные значения FPS при выбранных разрешениях не должны поддерживаться вашей веб-камерой. Вы можете проверить поддерживаемые разрешения /fps с помощью графических инструментов, таких как cheese, или таких команд, как lsusb ( 2).
Посмотрите руководство opencv2.4, захват видео намного лучше, чем раньше,
-> set (CV_CAP_PROP_FPS, 30), работает для меня большую часть времени. но немного низкая эффективность.
на всякий случай вам может не понравиться новый opencv2.4 и вы все еще хотите управлять своей камерой. проверьте lib видеовхода здесь. он работает хорошо и использует функции DirectShow. http://www.aishack.in/2010/03/capturing-images-with-directx/ http://www.muonics.net/school/spring05/videoInput/