Python 向gstreamer视频流添加一些OpenCV处理 我试图让OpenCV在G流光管的中间处理一个帧。

Python 向gstreamer视频流添加一些OpenCV处理 我试图让OpenCV在G流光管的中间处理一个帧。,python,opencv,gstreamer,Python,Opencv,Gstreamer,我有一个gstreamer管道生成流,将其发送到appsink,以便OpenCV代码接收: v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 另一个管道从appsrc(OpenCV向其发送数据)获取数据并在屏幕上输出: appsrc name=src ! jpegdec ! xvimagesink 我在sink上用pull缓冲区请求打开每个帧,用OpenCV处理它,然后在src上使用push缓冲区。我正在用Python做所有这些

我有一个gstreamer管道生成流,将其发送到appsink,以便OpenCV代码接收:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink
另一个管道从appsrc(OpenCV向其发送数据)获取数据并在屏幕上输出:

appsrc name=src ! jpegdec ! xvimagesink
我在sink上用pull缓冲区请求打开每个帧,用OpenCV处理它,然后在src上使用push缓冲区。我正在用Python做所有这些

出于某种原因,这似乎不起作用(分段错误)

但我并不是真的想修复它;不管怎样,它的效率非常低。我只是想知道是否有更好的方法让OpenCV在帧到达输出接收器之前对其进行处理

你试过了吗?它提供了几个opencv原语作为gstreamer插件


编辑:似乎它被合并到了中,上面的链接已经过时了。

我知道从你最初的问题开始已经过了几年,但为了记录在案,OpenCv可以直接打开Gstreamer管道。有关示例,请参见中的(自我)答案


顺便说一下,(master branch)实际上集成了gstreamer 1.0支持。

谢谢您的回答。我考虑过gst opencv,但决定反对它,因为我想要以任何方式处理视频帧的自由(例如,应用特定领域的机器学习算法),并且gst opencv提供的选项非常通用。因为您想要的比gst opencv能够提供的更多,如果您不介意用C(或C++)编写逻辑的话,也许你应该试着把它写成gst的插件?您可以将gst opencv插件的源代码之一作为起点另一件事-您的示例似乎只是从v4l2中获取的,我认为opencv的HighGui API已经支持了这一点(或者至少是没有“2”的v4l)。如果您真的不需要gstreamer,那么这将是最简单的解决方案。1。好建议,我可能会这么做。2.您是对的,在本例中我可以使用HighGUI,但v4l2src仅用作示例。在实际应用中,我打算从tcp源获取视频流,因此我无法在OpenCV中真正实现整个过程。