私は構造化された光で作業しており、私が書いたクラスがQCamera
あります。QProjector
プロジェクタがパターンを投影すると、接続されているすべてのカメラがそのパターンをキャプチャするのを待ってから、次のパターンに進む必要があります。
私の現在のモデルはこれです:
QProjector
画像を投影し、信号を発しますpatternProjected(Pattern*)
。- Connected
QCamera
は信号を受信し、プロジェクターのhold()
信号に接続します (以下を参照)。その後、カメラは非同期で画像のキャプチャを開始し、完了すると出力frameCaptured(cv::Mat)
します。
以前は にhold()
スロットがありましたQProjector
。プロジェクターを待機させたいカメラは、呼び出します。
connect(projector,SIGNAL(hold()),camera,SLOT(wait()))`
はcamera->wait()
ダミー関数です。次に、 で、プロジェクタは がゼロprojector->disconnectNotify()
かどうかを確認します。receivers(SIGNAL(hold()))
そうである場合、プロジェクタはキュー内の次のパターンに移動します。そうでない場合は、もう少し待ちます。
patternProjected()
このアプローチは非常に混乱しており、機能しません。カメラからの接続の送信と受信の間で、プロジェクターが次のパターンに移行しないという保証はありません。
QObject
哲学に沿って、理想的にはもう1つ、よりクリーンなアプローチを持っている人はいますか?