我需要在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
的不同选项。这让我觉得你应该能够打开你的相机没有一些依赖(通过使用其他代替)。