ホームページ  >  記事  >  バックエンド開発  >  OpenCV のフル キャプチャ バッファによって引き起こされるビデオ キャプチャの遅延に対処する方法は?

OpenCV のフル キャプチャ バッファによって引き起こされるビデオ キャプチャの遅延に対処する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-05 15:31:02782ブラウズ

How to Address Video Capture Lag Caused by a Full Capture Buffer in OpenCV?

キャプチャ バッファによるビデオ キャプチャの遅延

問題

OpenCV の VideoCapture を使用して Web カメラから mjpeg ビデオ ストリームをキャプチャすると、次の場合に大幅な遅延が発生する可能性があります。キャプチャ スレッドは、Web カメラ フィードのフレーム レートよりも低いレートでフレームを読み取ります。これは、バッファがフラッシュされるまでキャプチャ バッファにフレームが蓄積されることが原因で発生します。

OpenCV ソリューション

キャプチャ バッファを手動でフラッシュするには、VideoCapture オブジェクトの CV_CAP_PROP_BUFFERSIZE プロパティを設定できます。これにより、内部バッファに保存されるフレームの数が制限されます。ただし、このオプションは特定のバックエンド ハードウェアでのみサポートされています。

ハックアラウンド 1

バッファ サイズを設定しても問題が解決しない場合は、ハックアラウンド手法を使用できます。これには、フレームの取得にかかる時間が特定のしきい値を超えるまで、フレームのクエリを繰り返し行うことが含まれます。取得時間が異常に短い場合は、フレームがバッファから取得されたものであり、破棄する必要があることを示しています。

ハックアラウンド 2

もう 1 つのハックアラウンド ソリューションは、フレームを継続的に取得する別のスレッドを作成することです。高速でキャプチャ バッファを空に保ちます。このスレッドは、フレームを取得する際のオーバーヘッドを回避するために、 cv::VideoCapture.grab() 関数を使用する必要があります。同期技術を使用すると、ワーカー スレッドが制御された方法でバッファからフレームを確実に読み取ることができます。

以上がOpenCV のフル キャプチャ バッファによって引き起こされるビデオ キャプチャの遅延に対処する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。