私は構造化された光で作業しており、私が書いたクラスが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つ、よりクリーンなアプローチを持っている人はいますか?