2

2 台のカメラ (左側に低解像度カメラ、右側に高解像度カメラ) の opencv を使用して、組み込み関数と外部関数の調整に成功しました。2 セットの画像 (チェス盤のパターン - 各カメラから約 20 枚の画像) からステレオ キャリブレーションを行いました。これで left.yml、right.yml、translationRotation.yml ができました。ここで、右の画像をワープ/歪ませて、左の画像と同じ (遠近法/歪みなど) に見えるようにします。キャリブレーションからのすべてのデータがあることはわかっています。操作を行うために適切なopencv関数を使用する方法を知っているだけです。warpPerspective、リマップ、または何か?

背景情報 - 基本的に、低解像度の RGB カメラ フィード (左) を高解像度の RGB カメラ フィード (右) に置き換えています。ofxCv で Openframeworks/c++ を使用します。

ありがとう。

4

1 に答える 1

2

私の理解が正しければ、カメラごとに異なる歪みがあり、そのうちの 1 つを元に戻し、他のカメラの歪みを適用したいと考えています。歪みのない部分については、これが私が過去に行ったことです。

OFを使用すると、設定時に を使用して歪み/歪みのないマップを作成できます。これにより、オブジェクトcv::initUndistortRectifyMapの形で 2 つのマップが得られます。cv::Matこの関数は、キャリブレーションからカメラ マトリックスと歪み係数を受け取ります。

次に、 を使用してマッピングを適用できますcv::remap。結果を 2 番目のパラメーターに格納します。

歪みを元に戻した後、他のカメラの歪みを適用するために、逆マッピングを適用する必要があります。あなたが言及した warpPerspective 関数はそのためにうまく機能するようですが、おそらく.yml取得したファイルからマッピングを計算できます。反対のマッピングを適用するだけの問題です。

ofxCV のラッピングを使用して、必要なときにいつでも ofImage から Mat に切り替え、不要なコピーを作成しないようにします。

于 2013-11-21T13:35:59.277 に答える