在多相机之间的姿态求解过程中,opencv自带两种类别的函数,cameracalibration(内参和外参均未知)和cv::solvePnP函数(内参已知,核心还是调用cvfindextrinsic函数)。同时,在solvePnP求解过程中,注意与opencv一般习惯float类型不同的是,其参数使用为double类型,否则会得到无效解。在正确使用后,相机之间的误差相差几毫米。
在求解多相机之间的姿态变换过程中,注意相机之间坐标系的转换和非重叠相机视场之间的信息关联,在此特别注意这两点,本楼主卡在这半天,就是这一个小BUG,把整个程序代码查了个遍,码砖需谨慎。
cv::Mat rotateVecChange, transVecChange;
cv::Mat cameraMatrix, cv::Mat distCoeffs;
vector<cv::Point2f> image_points_seq, vector<cv::Point3f> object_points_seq;
cv::solvePnP(object_points_seq, image_points_seq, cameraMatrix, distCoeffs, rotateVecChange, transVecChange, false, cv::SOLVEPNP_ITERATIVE);