私は現在、一対のステレオカメラ用のopenCVプログラムを作成しています。 カメラのキャリブレーションとステレオキャリブレーションが行われます。InitUndistortRectifyMapとRemap
次のステップは、私が得る2つの画像から空間内の地物の位置を見つけることです。だからこそ私はステレオ画像を整理してから計算しなければならないのです。
私はinitUndistortRectifyMap
に直面しています問題は以下の通りです:
私はリマップ後に黒画像を取得stereoRectify()
initUndistortRectifyMap()
にして算出R1やR2を渡す-if。
- 私がinitUndistortRectifyMap()
にr(空の行列)を渡すと、再マッピング後に未補正の画像が得られます。私が得た画像は少し歪んでいます。
2台のカメラを整流するために、R1とR2をinitUndistortRectifyMap()
に渡す必要があります。そうしないと、空の行列を渡すとステレオヘッドが同じ平面に回転しません。
stereoRectify(intrinsic[0], distCoeffs[0], intrinsic[1], distCoeffs[1], imageSize,
R, T_Stereo, R1, R2, newP1, newP2, Q, CV_CALIB_ZERO_DISPARITY, -1, imageSize);
if (x_Cam.GetSerial()=="4002678487")
{
initUndistortRectifyMap(intrinsic[0], distCoeffs[0], R1, newP1, imageSize,
CV_16SC2 , mapx1, mapy1);
remap(x_Image, imageRectified[0],mapx1, mapy1, INTER_LINEAR);
return imageRectified[0];
}
if (x_Cam.GetSerial()=="4002702131")
{
//flip(in, in, -1);
initUndistortRectifyMap(intrinsic[1], distCoeffs[1], R2, newP2, imageSize,
CV_16SC2 , mapx2, mapy2);
remap(x_Image, imageRectified[1],mapx2, mapy2, INTER_LINEAR, BORDER_CONSTANT, 0);
return imageRectified[1];
}
私はstereoRectify()
に行くすべてのマトリックス値をチェックし、それらが正しい:後
は私のコードです。回転行列R1、R2も同様に正しいと思われる。私はちょうど出力として黒いイメージを得ています。
R1とR2(例:R1 * R2)のゴミ値をに渡してみましたが、単純に効果を見ると、奇妙な結果が得られましたが、黒い画像は表示されませんでした。
「initUndistortRectifyMap()はなぜ奇妙な結果ではなく黒い画像を返すのですか?次回は、具体的な質問を明示的にしてみてください。 –
'initUndistortRectifyMap()'を使う前にカメラを較正する必要があります。まだそれをやっていないようです。カメラを校正するコードを投稿してください:http://www.aishack.in/2010/07/calibrating-undistorting-with-opencv-in-c-oh-yeah/ –
1台のカメラは両方とも校正されていますカメラをStereoCalibrate()と一緒に使用します。私はStereoCalibratoinからRとTの行列をチェックしており、それらは正しいです。 – user1901213