キャプチャ バッファによる OpenCV VideoCapture の遅延
Web カメラを介したビデオのキャプチャには、キャプチャ バッファによる遅延が発生する可能性があります。フレームは読み取られる前に保存されます。この問題は、フレームの読み取り速度がフレームのキャプチャ速度よりも遅い場合に発生し、バッファー内にフレームが蓄積されます。
OpenCV ソリューション
OpenCV では、CV_CAP_PROP_BUFFERSIZE を使用して VideoCapture オブジェクトのバッファ サイズを設定できます:
<code class="cpp">cv::VideoCapture cap;
cap.set(CV_CAP_PROP_BUFFERSIZE, 3); // Store only 3 frames in the buffer</code>
Hackaround 1
OpenCV ソリューションがそうでない場合うまくいかない場合は、次のハックアラウンドを使用できます:
- バッファからフレームをクエリするのにかかる時間を測定します。
- 時間が短い場合は、フレームをそのまま破棄します。バッファから読み取ります。
- 時間が制限を超えるまでフレームのクエリを続けます。これは、バッファが空で次のフレームが最新であることを示します。
ハックアラウンド2
もう 1 つのハックアラウンドには、3 番目のスレッドを使用して高速で連続的にフレームを取得し、バッファを空に保つことが含まれます。
- cv:: を呼び出す 3 番目のスレッドを作成します。 VideoCapture.grab() を使用してフレームをフェッチします。
- スピン ロックを使用して、ワーカー スレッドと 3 番目のスレッドの間でフレームの読み取りを同期します。
以上がOpenCV VideoCapture が遅いのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。