我发现了问题所在 !我假设无论我选择什么3D坐标点,重建都将照顾到它。但是,我注意到了一些奇怪的事情:当使用一系列3D点时,这些点中只有一部分被正确地重建。经过进一步调查,我发现只有在摄像机视场内的图像才能被正确地重建。视场是固有参数的函数(反之亦然)。
为使以上代码正常工作,请尝试按以下方式设置参数(本机来自我的相机):
...
const double f_x = 2746.;
const double f_y = 2748.;
const double c_x = 991.;
const double c_y = 619.;
...
const cv::Point3d point_single(10.0, -2.0, 30.0);
...
另外,请不要忘记在相机坐标中负y
坐标为UP
:)
...
double f_x = intrinsic.at<double>(0, 0);
double f_y = intrinsic.at<double>(1, 1);
double c_x = intrinsic.at<double>(0, 3);
double c_y = intrinsic.at<double>(1, 3);
...
但是intrinsic
是一个3x3
矩阵。
编写单元测试!!!