私は現在、ステレオカメラのペア用のopenCVプログラムを書いています。カメラのキャリブレーションとステレオ キャリブレーションが行われます。
次のステップは、取得した 2 つの画像から空間内のフィーチャの位置を見つけることです。そのため、画像をステレオ修正し、後で計算を行う必要があります。
私が直面している問題initUndistortRectifyMap
は次のとおりです。
stereoRectify()
- によって計算されたR1 または R2 を渡すinitUndistortRectifyMap()
と、再マッピング後に黒い画像が得られます。
- r (空行列) を に渡すとinitUndistortRectifyMap()
、再マッピング後に修正されていない画像が得られます。私が得る画像は少し歪んでいます。
initUndistortRectifyMap()
2 つのカメラを調整 するために R1 と R2 を渡す必要があります。そうしないと、空のマトリックスを渡すときに、ステレオ ヘッドが同じ平面に回転しません。
以下は私のコードです:
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 も正しいようです。出力として黒い画像を取得しています。
InitUndistortRectifyMap()
効果を簡単に確認するために、R1 と R2 (たとえば R1*R2) に不要な値を渡そうとしましたが、奇妙な結果が得られましたが、黒い画像は得られませんでした。