对于一个项目,我需要计算相机相对于已知物体的真实位置和方向。我有一组照片,每张照片都从不同的角度展示了一个棋盘。使用 CalibrateCamera 和 solvePnP 我能够在 2d 中重新投影点,以获得 AR 的东西。所以我的情况是这样的:
内在参数是已知的
失真系数是已知的
每张照片都知道平移向量和旋转向量。
我根本无法弄清楚如何计算相机的位置。我的猜测是:
反转平移向量。(=t')
将旋转向量转换为度数(似乎是弧度)并反转
在旋转矢量上使用罗德里格斯
计算 RotationMatrix * t'
但结果不知何故完全不对......基本上我想为世界坐标中的每个像素计算一条射线。如果需要有关我的问题的更多信息,我很乐意快速回答。
我不明白……不知何故,光线仍然熄灭。这是我的代码顺便说一句:
Mat image1CamPos = tvecs[0].clone(); //From calibrateCamera
Mat rot = rvecs[0].clone(); //From calibrateCamera
Rodrigues(rot, rot);
rot = rot.t();
//Position of Camera
Mat pos = rot * image1CamPos;
//Ray-Normal (( (double)mk[i][k].x) are known image-points)
float x = (( (double)mk[i][0].x) / fx) - (cx / fx);
float y = (( (double)mk[i][0].y) / fy) - (cy / fy);
float z = 1;
float mag = sqrt(x*x + y*y + z*z);
x /= mag;
y /= mag;
z /= mag;
Mat unit(3, 1, CV_64F);
unit.at<double>(0, 0) = x;
unit.at<double>(1, 0) = y;
unit.at<double>(2, 0) = z;
//Rotation of Ray
Mat rot = stof1 * unit;
但是当绘制这个时,光线是关闭的:/