私が取り組んでいるプロジェクトでは、2 つの異なるスレッドを使用して、Opencv と C++ を使用して Windows システム上の異なるハードウェアから画像を取得しています。この記事では、カメラ 1 とカメラ 2 と呼びます。フレームレートが異なるため、同じスレッドで camera1 と camera2 の両方からキャプチャしたり、一度に 1 つの画像をキャプチャしようとしたりすることはできません。代わりに、両方のカメラにバッファを設定しました。Camera1 は、camera2 の 2 倍以上のフレーム レートで動作します。
3 番目のスレッドは、カメラ 2 からフレームを取得し、それを最も近い時点でカメラ 1 によって撮影された画像と一致させようとします。私が抱えている問題は、あるソースからの画像を、他のソースでほぼ同時に取得された画像に一致させる良い方法が見つからないことです。
優先度が高くない別のスレッドで使用する場合に正確なタイムスタンプをこれらの画像に割り当てる方法はありますか? そうでない場合、このようなシステムにより適した別の設計方法はありますか。
clock() や queryperformancecounter などの Windows で時間を追跡する方法が、異なる CPU の別々のスレッドで使用された場合にどの程度離れているかについての情報を見つけるのに苦労しました。別々のスレッドで使用すると正確ではないことを読みましたが、毎秒約 20 フレームでフレームを取得しているため、オフであっても十分に近い可能性があります。
前もって感謝します!何かを明確にする必要があるか、より適切に説明する必要があるかどうか教えてください。
編集:
残念ながら、ドライバーやハードウェアからタイムスタンプを取得する方法はないと思います。ただし、各スレッドに対して画像が実際にキャプチャされた時期をかなり正確に判断する方法を見つけたと思います。対処方法がよくわからない部分は、別々のコアで実行されている 2 つのスレッドで clock() または同様のものを使用すると、タイムスタンプがどれだけずれるかということです。2 つの異なるコアのタイム スタンプが互いに約 25 ミリ秒以内であると期待できれば、それが理想的です。2つの違いを測定する良い方法を実際に理解することができませんでした. さらに調査を行ったところ、Windows API の timeGetTime は、別の CPU コアから呼び出されてもあまり影響を受けないようです。私はそれを試してみるつもりです。