c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)

【c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)】最近研究相机,看一些相机位姿和相机外参,但总是将世界坐标系和相机坐标系进行记错,,也不理解什么是相机位姿和相机外参的关系,在实际应用中发现很多问题。所以这几天在实际应用中,重新对于相机坐标和世界坐标系的讨论和实践,然后整理了一下。
看了一下《视觉SLAM》,
c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)
文章图片

画出相机在世界坐标系的位置和它的朝向代码(z轴就是朝向)如下:

void SaveCamPoseIntoOBJ(std::vector& cams_pose, const std::string& path) { std::ofstream fh(path); int step_size = 1000; float step = 0.05; for (int i = 0; i < cams_pose.size(); ++i) {Eigen::Matrix3f R_wc = cams_pose[i].topLeftCorner(3, 3); Eigen::Vector3f T_wc = cams_pose[i].topRightCorner(3, 1); --------------------三根轴------------------------// //x轴 Eigen::Vector3f local_x = R_wc.col(0); //y轴 Eigen::Vector3f local_y = R_wc.col(1); //z轴 Eigen::Vector3f local_z = R_wc.col(2); std::vector cam_x_local_pnts; std::vector cam_y_local_pnts; std::vector cam_z_local_pnts; for (int i = 0; i < step_size; ++i) { //x轴 float x_x = T_wc(0) + i * step * local_x(0); float x_y = T_wc(1) + i * step * local_x(1); float x_z = T_wc(2) + i * step * local_x(2); Eigen::Vector3f tmp_x(x_x, x_y, x_z); cam_x_local_pnts.emplace_back(tmp_x); //y轴 float y_x = T_wc(0) + i * step * local_y(0); float y_y = T_wc(1) + i * step * local_y(1); float y_z = T_wc(2) + i * step * local_y(2); Eigen::Vector3f tmp_y(y_x, y_y, y_z); cam_y_local_pnts.emplace_back(tmp_y); //z轴 float z_x = T_wc(0) + i * step * local_z(0); float z_y = T_wc(1) + i * step * local_z(1); float z_z = T_wc(2) + i * step * local_z(2); Eigen::Vector3f tmp_z(z_x, z_y, z_z); cam_z_local_pnts.emplace_back(tmp_z); } for (int i = 0; i < step_size; ++i) { fh << "v " << cam_x_local_pnts[i](0) << " " << cam_x_local_pnts[i](1) << " " << cam_x_local_pnts[i](2) << " " << 255 << " " << 0 << " " << 0 << std::endl; fh << "v " << cam_y_local_pnts[i](0) << " " << cam_y_local_pnts[i](1) << " " << cam_y_local_pnts[i](2) << " " << 0 << " " << 255 << " " << 0 << std::endl; fh << "v " << cam_z_local_pnts[i](0) << " " << cam_z_local_pnts[i](1) << " " << cam_z_local_pnts[i](2) << " " << 0 << " " << 0 << " " << 255 << std::endl; } } fh.close(); }

计算得到的如下:
c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)
文章图片

2,下面是相机参数定义:
c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)
文章图片

3:相机外参和相机位姿的关系:
c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)
文章图片

4:实践中的投影(从三维点投影到二维图像上)应用和画出相机(调试):
c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)
文章图片

    推荐阅读