【c++|相机位姿和相机外参定义以及它们的关系(画出相机位置)】最近研究相机,看一些相机位姿和相机外参,但总是将世界坐标系和相机坐标系进行记错,,也不理解什么是相机位姿和相机外参的关系,在实际应用中发现很多问题。所以这几天在实际应用中,重新对于相机坐标和世界坐标系的讨论和实践,然后整理了一下。
看了一下《视觉SLAM》,
文章图片
画出相机在世界坐标系的位置和它的朝向代码(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();
}
计算得到的如下:
文章图片
2,下面是相机参数定义:
文章图片
3:相机外参和相机位姿的关系:
文章图片
4:实践中的投影(从三维点投影到二维图像上)应用和画出相机(调试):
文章图片
推荐阅读
- slam|相机中的参数sensor size 和focal length 计算相机参数内参f
- #|常用C/C++开源库
- c++|c++ 分布式令牌桶_分布式之流量控制
- 算法|二进制,八进制,十进制,十六进制的相互转换【简单易懂】
- c++|动手打造深度学习框架(基本数据结构与算法)
- C++|基于协程io_uring 异步网络库系列 III( Proactor、异步与协程 | C++20 coroutine 教程 | io_uring 异步IO 网络框架 系列笔记)
- cpp|c++入门学习——使用C++做一个yolov5视频检测
- C++|C++学习——共勉(一)
- C++从入门到放弃|c++学习笔记1(实验1)_封装CMatrix类