2017-06-14 3 views
0

カメラから来るすべてのフレームを処理するために、Qtとopencvを使ってアプリケーションを開発したいと考えています。 私は2つのQthreadを持っています.1つは画像キャプチャ用で、もう1つは処理用です。 処理スレッドは少し遅いので、すべてのフレームを処理するために、フレームバッファを用意する必要があります。 私は実際にフレームバッファをimpelementする方法を考えていません。 どんな助けでも感謝します。ビデオ処理用の画像バッファ

+1

単一の処理スレッドがキャプチャレートに追いついていないとすれば、おそらく複数の処理スレッドが必要になります。これは、単一プロデューサとマルチコンシューマのセットアップの古典的な候補のように見えます。 –

答えて

0

処理スレッドがフレームキャプチャ期間より遅い場合、最終的にコードがメモリ不足になります。キャプチャフレームレートの減少、フレームのドロップ、またはフレーム解像度の低下を考慮する必要があります。

バッファとして、捕捉糸生産および処理スレッドが消費者であろうとなり、フレームのためスレッドセーフ円形キューに行きます。キューがいっぱいの場合は、次の2つのオプションがあります。(1)最も古い(処理されていない)ものを削除し、新しいものを追加します。 (2)最新のフレームをドロップするだけで、実装が非常に簡単です。

2

スレッドを作成して非同期に実行したい場合があります。イメージをキャプチャするときは、キャプチャスレッドを使用してstd::queueに追加して、処理スレッドをキューから取得させます。メモリ使用量と処理時間を削減するためにできるだけポインタを使用するようにしてください。スレッドセーフであることを確認し、必要に応じてstd::Mutexを使用してください。

QTを使用しているため、キューにはQQueue、ミューテックスにはQMutexを使用できます。

+0

キャプチャ側と処理側に簡単なコードを書くようにお願いしますか?ちょうど私に開始のアイデアを与えるために。 – Atefe

+1

いくつかのサンプルコードを提供していれば、それを見て助けてください。 – Apexdev