OpenCV の VideoCapture を使用して Web カメラから mjpeg ビデオ ストリームをキャプチャすると、次の場合に大幅な遅延が発生する可能性があります。キャプチャ スレッドは、Web カメラ フィードのフレーム レートよりも低いレートでフレームを読み取ります。これは、バッファがフラッシュされるまでキャプチャ バッファにフレームが蓄積されることが原因で発生します。
キャプチャ バッファを手動でフラッシュするには、VideoCapture オブジェクトの CV_CAP_PROP_BUFFERSIZE プロパティを設定できます。これにより、内部バッファに保存されるフレームの数が制限されます。ただし、このオプションは特定のバックエンド ハードウェアでのみサポートされています。
バッファ サイズを設定しても問題が解決しない場合は、ハックアラウンド手法を使用できます。これには、フレームの取得にかかる時間が特定のしきい値を超えるまで、フレームのクエリを繰り返し行うことが含まれます。取得時間が異常に短い場合は、フレームがバッファから取得されたものであり、破棄する必要があることを示しています。
もう 1 つのハックアラウンド ソリューションは、フレームを継続的に取得する別のスレッドを作成することです。高速でキャプチャ バッファを空に保ちます。このスレッドは、フレームを取得する際のオーバーヘッドを回避するために、 cv::VideoCapture.grab() 関数を使用する必要があります。同期技術を使用すると、ワーカー スレッドが制御された方法でバッファからフレームを確実に読み取ることができます。
以上がOpenCV のフル キャプチャ バッファによって引き起こされるビデオ キャプチャの遅延に対処する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。