0
我首先使用opencv包(stereo_calib.cpp)中的示例代码校准了我的相机。现在我想用它来纠正图像的立体匹配。我开始纠正一个图像,但我不能仅仅因为initUndistortRectifyMap返回一个不包含任何内容的地图而工作。我找不到我做错了什么。initUndistortRectifyMap返回空映射矩阵(C++)
Mat ciml, cimr, iml, imr, imlCalibrated, imrCalibrated;
vector<KeyPoint> keyl, keyr, keyInPlane, keyMatched;
//-- Load Images and convert to gray scale
string filenamel = "img/imL2.png";
string filenamer = "img/imR2.png";
ciml = imread(filenamel, 0);
cvtColor(iml, ciml, CV_GRAY2BGR);
cimr = imread(filenamer, 0);
cvtColor(imr, cimr, CV_GRAY2BGR);
Size imageSize = iml.size();
//-- Load calibration matrices
FileStorage fs_in, fs_ex;
fs_in.open("intrinsics.yml", FileStorage::READ);
fs_ex.open("extrinsics.yml", FileStorage::READ);
Mat rmap[2][2], cameraMatL, cameraMatR, coeffMatL, coeffMatR, R1, R2, P1, P2;
fs_ex["R1"] >> R1; fs_ex["R2"] >> R2;
fs_ex["P1"] >> P1; fs_ex["P2"] >> P2;
fs_in["M1"] >> cameraMatL; fs_in["M2"] >> cameraMatR;
fs_in["D1"] >> coeffMatL; fs_in["D2"] >> coeffMatR;
cout << "camera Matrix: " << endl << cameraMatL << endl << endl;
//-- Find remap values
initUndistortRectifyMap(cameraMatL, coeffMatL, R1, P1, imageSize, CV_16SC2, rmap[0][0], rmap[0][1]);
initUndistortRectifyMap(cameraMatR, coeffMatR, R2, P2, imageSize, CV_16SC2, rmap[1][0], rmap[1][1]);
解答: 这是非常简单的,因为图像没有加载图像大小是零,因此在地图是一个空矩阵。 将尽快发布答案。
您是否在rmap中获得0x0大小的图像,或者地图中的像素值是0?请注意,由initUndistortRectifyMap生成的映射将用作函数重映射中的参数。这会做你想看到的实际失真。如果使用CV_16SC2格式,我不确定您必须使用第二个rmap参数。 – 2013-03-04 12:11:50
我得到了0x0大小的图像。因为图像没有加载。谢谢您的帮助。对不起,我问过这样一个简单的问题,我只是一直在寻找答案。 – TobyHijzen 2013-03-04 12:21:40