現在、GPU (CUDA/C++) にモーション トラッキング アルゴリズムを実装しており、これまでのところ非常に高速化されています。ただし、おそらく予想できるように、主なボトルネックは、CPU から GPU へのフレーム (画像) データの実際の転送です。
そのまま、OpenCV を使用してテスト ビデオ ファイルを読み込みます。ただし、OpenCV は、フレームを の形式RRGGBB RRGGBB ...
でパックされたバイトとして返します。つまり、各ピクセルは 24 ビット境界に揃えられます。これにより、結合されたメモリ アクセスを使用できなくなり、GPU のパフォーマンスが大幅に低下します。現状では、 32 ビットで整列された事前生成されたテスト データを使用しているだけですが(フォームにゼロが埋め込まれていますRRGGBB00 RRGGBB00 ...
)、実際のビデオ データを今すぐ使用したいと思います。
これにより、パフォーマンスが大幅に低下するため、主な質問が 2 つあります。
CPU で対象のピクセルを手動で前処理して転送を開始することはできますが、ピクセル データを GPU にすばやく転送し、代わりに 32 ビット境界に合わせる方法はありますか? (ただし、これは前処理と同じパフォーマンス ヒットがあると思います)
ビデオを別の形式で読み込むために使用できる別のライブラリはありますか? たとえば、アルファ チャネルが含まれていなくても、SDL サーフェスが 32 ビット境界でパックされていることはわかっています。
実装の最終目標は、ロボット制御用のカメラとリアルタイムでインターフェースすることですが、今のところは、テスト ビデオを効率的にデコードして、事前定義されたテスト データを使用して機能検出とモーション トラッキング アルゴリズムをテストできるものが必要です。 .