在GStreamer视频流中添加OpenCV处理
我正在尝试让OpenCV在gstreamer管道中处理一个帧。
我有一个gstreamer管道在生成视频流,并把它发送到appsink,这样OpenCV的代码就可以接收:
v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink
还有另一个管道从appsrc获取数据(OpenCV把数据发送到这里),然后把它输出到屏幕上:
appsrc name=src ! jpegdec ! xvimagesink
我通过在sink上发出pull-buffer请求来打开每一帧,然后用OpenCV处理它,最后在src上使用push-buffer。我都是用Python来做这些。
但出于某种原因,这似乎不太好用(出现了段错误)。
不过我并不想真的去修复它;反正效率也很低。我只是想知道有没有更好的方法让OpenCV在帧到达输出sink之前处理它?
2 个回答
1
我知道距离你最初提问已经过去几年了,但为了记录一下,OpenCv可以直接打开Gstreamer管道。你可以查看这个链接中的(自我)回答,了解一个例子:在OpenCV中使用自定义相机(通过GStreamer)。
顺便提一下,OpenCv 3.0(主分支)实际上已经集成了对gstreamer 1.0的支持。
3
你试过 gst-opencv 吗?它提供了几个 OpenCV 的基本功能,可以作为 GStreamer 的插件使用。
补充说明:看起来它已经合并到 gst-plugins-bad 里了,所以上面的链接已经过时了。