2014-05-06 3 views
2

Мне нужно позвонить Gstremaer в код openCV (по существу, открывая видеокамеру). Как я просмотрел исходный код, modules/highgui/src/cap_gstreamer.cpp кажется файлом, который я ищу.Вызов Gstreamer внутри openCV

Я скомпилировал OpenCV с флагом Gstreamer.

GStreamer: 
--  base:      YES (ver 1.2.3) 
--  video:      YES (ver 1.2.3) 
--  app:      YES (ver 1.2.3) 
--  riff:      YES (ver 1.2.3) 
--  pbutils:     YES (ver 1.2.3) 

, но я не в состоянии назвать Gstreamer функции, связанные (например, cvCreateCapture_GStreamer, который определен в cap_gstreamer.cpp) cap_gstreamer.cpp был успешно построен как OpenCV журнал установки предложил:

[ 17%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/cap_gstreamer.cpp.o 

cvCreateCapture_GStreamer является также присутствует внутри /usr/local/lib/libopencv_highgui.so.3.0.0 после строительства openCV (установлено, что с использованием grep)

Я использую #include <opencv/highgui.h> но вызова cvCreateCapture_GStreamer не удается (-lopencv_highgui флаг установлен внутри Makefile):

error: ‘cvCapture_GStreamer’ was not declared in this scope 

Любые предложения будут полезны и очень ценится.

Спасибо!

+0

cvCapture_GStreamer не является частью публичного (клиентского) api. он используется внутри модуля highgui. – berak

ответ

1

Фактически, вы не можете использовать API GStreamer через OpenCV. Что OpenCV имеет ряд функций оболочки (как, например, cvCaptureFromCam), которые реализуют свои функции через внешние мультимедийные библиотеки. Например, в стороне от GStreamer, OpenCV может использовать другие библиотеки, такие как FFmpeg, v4l .. на самом деле, если вы посмотрите полный список файлов, связанных с мультимедийным захвата с помощью различных внешних библиотек вы найдете:

(in opencv/modules/highgui/src) 
cap_cmu.cpp  
cap_dc1394.cpp  
cap_ffmpeg.cpp  
cap_gstreamer.cpp 
... 

Так , если вы скомпилируете OpenCV с поддержкой GStreamer, вы будете называть те же функции highgui (как cvCaptureFromCam), но на низком уровне он будет вызывать функции вроде cvCreateCapture_GStreamer, которые реализуют вызовы API GStreamer. Но это не означает, что вы можете назвать себя теми низкоуровневыми функциями (следовательно, ошибка «не была объявлена ​​в этой области»).

Надеюсь, что это поможет!

EDITED: посмотреть файл cap.cpp в источнике opencv. Обратите внимание на различные варианты для CvCreateCameraCapture_XXX. Это заставляет меня думать, что вы должны иметь возможность открывать свою камеру без каких-либо зависимостей (используя вместо этого другие).

+0

Это отличное объяснение, спасибо! Итак, по умолчанию (например, компиляция OpenCV без поддержки GStreamer), как это работает (открытие камеры)? Причина, по которой я спрашиваю, у меня есть пользовательская плата, в которой используется другой драйвер, чем v4l/v4l2, который я могу открыть с помощью gstreamer камеры, но, видимо, вам не удастся использовать OpenCV. Есть ли способ изменить низкоуровневую функцию OpenCV для использования других драйверов? – Mahyar

+0

Я отредактировал свой ответ, хотя у меня нет более глубокого знания о том, как зависимости highgui работают на более низком уровне. Вы можете задать другой вопрос, например: «Установка OpenCV в » или дальнейший поиск в документации OpenCV. –

Смежные вопросы