在openCV中调用Gstreamer



我需要在openCV代码中调用Gstremaer(本质上是打开一个摄像机)。当我查看源代码时,modules/highgui/src/cap_gstreamer.cpp似乎是我正在寻找的文件。

我用Gstreamer标志编译了OpenCV。

 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中定义的)根据opencv安装日志提示,cap_gstreamer.cpp已成功构建:

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

cvCreateCapture_GStreamer在构建openCV后也存在于/usr/local/lib/libopencv_highgui.so.3.0.0中(发现使用grep)

我使用#include <opencv/highgui.h>,但调用cvCreateCapture_GStreamer失败(-lopencv_highgui标志在Makefile中设置):

error: ‘cvCapture_GStreamer’ was not declared in this scope

任何建议都是有帮助的,非常感谢。

谢谢!

实际上,您不能通过OpenCV使用GStreamer API。OpenCV拥有的是一系列包装函数(例如,cvCaptureFromCam),它们通过外部多媒体库实现其功能。例如,除了GStreamer, OpenCV可能会使用其他库,如ffmpeg, v41 ..事实上,如果您通过不同的外部库检查与多媒体捕获相关的文件的完整列表,您将发现:

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

所以,如果你用GStreamer支持编译OpenCV,你将调用相同的highgui函数(如cvCaptureFromCam),但是,在一个较低的层次上,它将调用像cvCreateCapture_GStreamer这样的函数来实现对GStreamer API的调用。但这并不意味着你可以自己调用那些低级函数(因此出现了"was not declare in this scope"错误)。

希望有帮助!

编辑:看一下openv源代码中的cap.cpp文件。注意CvCreateCameraCapture_XXX的不同选项。这让我觉得你应该能够打开你的相机没有一些依赖(通过使用其他代替)。

相关内容

  • 没有找到相关文章

最新更新