【问题标题】:How to output opencv to gstreamer in python?如何在python中将opencv输出到gstreamer?
【发布时间】:2016-06-05 08:54:05
【问题描述】:

我想在 opencv 中处理相机流(工作正常),然后通过网络输出处理后的帧,这样我就可以看到它们,因为它是一个没有监视器的嵌入式系统。我花了几天时间寻找,但无法弄清楚如何在 python 中将帧推送到 gstreamer。看起来我应该在 gstreamer 中创建一个 appsrc->udp 管道(没问题),但是我找不到任何地方如何使用 python 将帧推送到 opencv 中的 appsrc。我在 C++ 中看到了一些示例,但我不知道如何将它们翻译成 python。 似乎可以像这样复制缓冲区: Push images into Gstreamer pipeline 或者这意味着通过直接在 opencv videowriter 中打开 appsrc 更简单: How to write opencv mat to gstreamer pipeline?

有没有人有一个非常简单的例子来说明如何在 python 中将 opencv 输出到 gstreamer?

【问题讨论】:

    标签: python opencv raspberry-pi gstreamer


    【解决方案1】:

    我不是 python 专家.. 但是this .. 呢?

    假设你有这个代码来连接appsrc需要数据信号(比如here):

    source = gst.element_factory_make("appsrc", "source")
    .. you need to set caps, then connect:
    source.connect('need-data', self.needdata)
    

    然后在needdata 函数中,您需要获取您的opencv 帧的数据指针并从中创建GstBuffer 并发出它..

    假设你有两个变量 self.data 是实际的 opencv 数据,self.size 是数据的大小:

    def needdata(self, src, length):
        buf = Gst.Buffer.new_allocate(self.size) 
        buf.fill(0, self.data)
        src.emit('push-buffer', buf)
    

    嗯,不确定该长度变量中的内容.. gstreamer 1.0 上的 pygst 似乎没有记录.. 或者我找不到文档..

    【讨论】:

    • 感谢您的回复和指点。我已经尝试过了,但无法确定正确的大小写、图像格式或如何设置 self.data 或 self.size。 opencv 文档太差了,python 中没有可用的示例,我认为解决这个问题的唯一方法是从 c++ 代码开始,然后尝试将其翻译成 python。有一些 C++ 代码,所以我将从它开始。如果我有任何地方,我会在这里更新。我不敢相信在python中将opencv连接到gstreamer的示例代码为零!
    • 您设置 self.data 只需从 opencv 分配分配的数据数组(或使用一些复制 memcpy python 样式函数 - 我是 python 中的菜鸟).. 是的,python gstreamer 文档非常缺乏。 . 但是有一个过时的 0.10 gstreamer python 示例somewhere .. 使用 c++ 的好主意 - 您也可以使用纯 C,因为 Gstreamer 在 C 中 .. gl
    • 我有办法在没有信号的情况下写入数据吗?
    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多