2011-01-14 31 views
7

OpenCVでgstreamerパイプの途中でフレームを処理しようとしています。OpenCV処理をgstreamerビデオストリームに追加する

Iを受信するためにOpenCVのコードをappsinkに送信ストリームを生成する1本のGStreamerのパイプを持っている:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 

と他の管(OpenCVのデータを送信した)appsrcからそれを取得して画面に出力します:

私は、すべてのフレームをシンクでプルバッファ要求で開き、OpenCVで処理してから、srcでプッシュバッファを使用します。私はPythonでこれをすべてやっています。

何らかの理由で、動作していないようです(セグメンテーションフォルト)。

しかし、私はそれを修正しようとしていません。とにかくそれはひどく非効率的です。 OpenCVが出力シンクに達する前にフレームを処理する方法があるかどうか疑問に思っていますか?

+2

gst-opencvが提供できるものより多くを望むので、あなたのロジックをC(またはC++)で書いても大丈夫なら、恐らくgstのプラグインとして書こうとするべきでしょうか? gst-opencvプラグインのソースの1つを開始点として取ることができます – sinelaw

+1

もう1つのこと - あなたの例はv4l2からちょうど掴んでいるようですが、opencvのHighGui APIは既にそれをサポートしています(または少なくとも '2'のないv4l)。あなたが本当にgstreamerを必要としない場合は、これが最も簡単な解決策になります。 – sinelaw

+0

1.良い提案、私はそれを行うかもしれません。 2.この場合はHighGUIを使用できますが、v4l2srcは単なる例として使用されています。実際のアプリケーションでは、私はtcpソースからビデオストリームを取得しようと考えていますので、OpenCVですべてを実装することはできません。 – SMiLE

答えて

2

gst-opencvを試しましたか?これは、gstreamerプラグインとしていくつかのopencvプリミティブを提供します。

EDITgst-plugins-badにマージされているようです。上記のリンクは古くなっています。

+0

あなたの答えをありがとう。私はgst-opencvを考慮しましたが、私が望むどのような方法でもビデオフレームを自由に処理したいので(ドメイン固有の機械学習アルゴリズムを適用するなど)、gst-opencvのオプションは非常に一般的です。 – SMiLE

1

OpenCvはオリジナルの質問から何年も経っていますが、記録のためだけにGstreamerパイプラインを直接開くことができます。例については、Using custom camera in OpenCV (via GStreamer)の(自己)回答を参照してください。

そして、OpenCv 3.0(マスターブランチ)は実際にgstreamer 1.0のサポートを統合しています。

関連する問題