要进行立体声校准,我们需要做3个步骤(输入参数 - >输出参数):
calibrateCamera()
:obj_corners,img_corners - > camera_matrix,distortion_coeffs
stereoCalibrate()
:obj_corners,img_corners1 / 2,camera_matrix1 / 2,distortion_coeffs1 / 2 - > R,T,E,F
stereoRectify()
:camera_matrix1 / 2,distortion_coeffs1 / 2,R,T - > R1 / 2,P1 / 2,Q
我错过了一些参考资料。
现在我们可以将Q用于reprojectImageTo3D()
,将P1或P2用于triangulatePoints()
。
但为什么我们需要同时输入(camera_matrix 1& 2)和(R& T)参数到stereoRectify()
?
众所周知camera_matrix已经包含R& T:
struct CV_EXPORTS CameraParams
{
CameraParams();
CameraParams(const CameraParams& other);
const CameraParams& operator =(const CameraParams& other);
Mat K() const;
double focal; // Focal length
double aspect; // Aspect ratio
double ppx; // Principal point X
double ppy; // Principal point Y
Mat R; // Rotation
Mat t; // Translation
};
R& S之间的区别是什么?我们从calibrateCamera()
和R&我们从stereoCalibrate()
得到的CameraParams中包含的T?
答案 0 :(得分:2)
这里的问题是术语不一致。 OpenCV称之为相机矩阵的是包含内在函数的3x3矩阵K
。 Harley和Zisserman所说的相机矩阵是一个3x4相机投影矩阵P = K * [R|t]
,包括内在函数和外在函数。