4

私のプログラムの 1 つを C++ (Visual Studio) で開発する際に少し問題があります。現在、複数の Web カメラ (USB ケーブルを介して接続) の接続に苦労しており、フレームをキャプチャするための個別のスレッドを作成し、フレームを個別に作成しています。画像加工用。

OpenCV を使用してフレームを処理しますが、問題は、Web カメラの可能性のピークを取得できないことです (25 fps をサポートし、18 のみを取得します)。OpenCV で処理するよりも、フレームを取得するために使用できるライブラリがいくつかあります。フレームをより速くキャプチャしましたか?

私は少し調べていましたが、最も一般的な方法は、directshow を使用してフレームを取得し、OpenCV を使用してそれらを処理することです。

同意しますか?または、別の解決策がありますか? 私はいくつかのリンクに腹を立てることはありません:)

4

2 に答える 2

6
  1. DirectShow は、次のように CV_CAP_DSHOW フラグを使用してキャプチャを開く場合にのみ使用されます。

    VideoCapture capture( CV_CAP_DSHOW + 0 );  // 0,1,2, your cam id there
    

    (それがないと、デフォルトで vfw になります)

  2. キャプチャは既に別のスレッドで実行されているため、より多くのスレッドでラップしても何のメリットもありません。

  3. 複数のカムのもう 1 つの障害は USB 帯域幅です。そのため、マシンの背面と前面にポートがある場合は、すべてのカムを同じポート/コントローラーに接続しないでください。

于 2013-02-10T15:16:20.763 に答える
4

OpenCV は DirectShow を使用します。DirectShow (Windows の主要なビデオ キャプチャ API) を直接使用すると、明らかに同等以上のパフォーマンスが得られます (OpenCV が Video for Windows を使用するように設定されている場合はさらに可能性が高くなります)。通常、USB カメラは USB 帯域幅に達するため、フレーム レートの制限に達します。DirectShow を使用して圧縮形式またはビット/ピクセルの少ない形式でキャプチャすることは、同じ USB 帯域幅制限内でより高いフレーム レートに到達する方法です。

低フレーム レートを引き起こすもう 1 つの一般的な問題は、同期処理が遅く、キャプチャが遅れることです。これは通常、単純な処理を同じキャプチャ ループに入れ、処理が有効な操作と比較して高い FPS を確認することで識別します。

于 2013-02-10T14:04:25.903 に答える