3

OpenCV を使用して、1280 x 960 のネイティブ解像度で Web カメラから取得したフレーム (の一部) を分析したいと考えています。Gstreamer とアプリシンクを使用してこれらをキャプチャできます。ただし、OpenCV をインポートするだけで Gstreamer が台無しになり、キャプチャが機能しなくなることに気付きました。OpenCV では 640x480 しかキャプチャできないため、gstreamer が必要です。それがもたらすすべての追加機能が好きになりました。

私の問題を示すために考えられる最も最小限の例は次のとおりです。

    import gst
    from time import sleep

    #import cv2

    pipeline = gst.Pipeline()
    bin = gst.parse_bin_from_description('''
    autovideosrc !
    video/x-raw-rgb, width=1280, height=960 !
    ffmpegcolorspace !
    xvimagesink
    ''', False)
    pipeline.add(bin)

    pipeline.set_state(gst.STATE_PLAYING)

    while True:
        sleep(1)

上記のバージョンでは、インポート cv2 ステートメントのコメントを外すと、問題なく動作します。次のエラー メッセージが表示されます。

libv4l2: エラーで 4 つの連続したフレーム デコード エラーが発生しました。最後のエラー: v4l-convert: エラー フレーム インデックスを列挙できませんでした: 6 for: src を使用した RGB3 1280x960: MJPG 1280x960、エラー: 引数が無効です

OpenCVバージョン2.4.1、Gstreamerバージョン0.10.36を使用して、Kubuntu Linux 12.04を使用しています

Gstreamer を台無しにするために openCV は何をしますか? どうすれば両方を使用できますか?

4

4 に答える 4

2

問題は、gstreamerの不良プラグインにすでにopencvが含まれていることである可能性があります。そのため、opencvのインストールがgstreamerが期待しているバージョンと衝突している可能性があります。

gstreamerでビルドでopencvを有効にする場合は、最初にopencvをインストールしてから、gstreamerをインストールしてください。それを望まない場合は、その逆を行ってください。

于 2012-09-09T04:01:53.507 に答える
0

回避策を見つけました:

Gstreamer パイプラインのセットアップ後に OpenCV を遅延インポートすると、OpenCV と Gstreamer はうまく連携します。

(上記の例では、'import cv2' ステートメントを 'pipeline.add(bin)' の後に移動することに対応します)

しかし、それは私が好きな答えではありません。

于 2012-09-09T00:33:08.880 に答える
0

または、OpenCV (2.4.x 以降) で GStreamer パイプラインを開くこともできます。例については、OpenCV でのカスタム カメラの使用 (GStreamer 経由)を参照してください。

OpenCV 3.0 (開発ブランチ) は GStreamer 1.0 と統合されています。

于 2014-07-15T16:22:16.420 に答える
0

また、適切にスケジュールできるように、openCV 処理を gstreamer プラグインに再適合することをお勧めします。

于 2012-09-10T05:11:28.633 に答える