1.5 点云数据获取方式——双目立体相机

1-5-1 双目立体相机

        双目相机通过模拟人眼立体视觉,利用两个摄像头的视差信息计算物体深度,进而生成 3D 点云,具有成本低、体积小、信息丰富等优势,成为中

### 使用PCL库将双目图像转换为点云PCD文件并显示 #### 准备工作 为了完成此任务,需安装配置好C++开发环境,并确保已成功安装OpenCV和PCL库。此外,还需准备一组匹配良好的左视图与右视图作为输入。 #### 获取立体校准参数 在处理之前,必须先获取相机的内参矩阵以及两摄像头之间的相对位置关系(即外参)。这些信息通常通过预先执行过的立体标定过程获得[^3]。 #### 加载图像 利用OpenCV读取存储于磁盘上的两张图片: ```cpp cv::Mat imgLeft = cv::imread("path_to_left_image"); cv::Mat imgRight = cv::imread("path_to_right_image"); ``` #### 计算视差图 调用StereoBM或StereoSGBM类来计算左右图像间的像素差异,形成视差图: ```cpp cv::Ptr<cv::StereoBM> sbm = cv:: StereoBM::create(numDisparities, blockSize); sbm->compute(imgGrayL, imgGrayR, disparity); // 假设imgGrayL 和 imgGrayR 是灰度版本 ``` 此处`numDisparities`代表最大可能存在的视差值数量;而`blockSize`则定义了用于比较的小窗口大小[^2]。 #### 构建三维坐标系下的点集合 借助上述所得视差图及事先求得的内外参,可以构建起对应的实际空间坐标的点集。这一步骤涉及到三角测量原理的应用,在PCL中有专门为此设计的功能接口——`reprojectImageTo3D()`: ```cpp cv::Mat Q; // 这里应该填入由stereoRectify()返回的结果之一 cv::reprojectImageTo3D(disparity, points_3d, Q); ``` 其中Q是一个四行五列的投影矩阵,它包含了重建所需的全部几何变换信息[^1]。 #### 创建Point Cloud Data (PCD) 文件 最后一步就是把上一步产生的浮点型三维数组转存至标准格式的pcd文档当中去。这里给出一段简单的代码片段说明具体做法: ```cpp pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); for(int i=0;i<points_3d.rows;++i){ for(int j=0;j<points_3d.cols;++j){ float data[3]; memcpy(data, points_3d.ptr<float>(i)+j*3,sizeof(float)*3); if(!isnan(data[2])){ // 排除无效点 cloud->push_back(pcl::PointXYZ(data[0],data[1],data[2])); } } } // Save the container to a file. pcl::io::savePCDFileASCII ("test_pcd.pcd", *cloud); std::cerr << "Saved " << cloud->size () << " data points to test_pcd.pcd."<< std::endl; ``` 以上操作完成后即可得到保存有点云数据的目标文件[^4]。 #### 显示点云 要查看生成好的点云效果,可采用如下方式加载并渲染之: ```cpp #include <pcl/visualization/cloud_viewer.h> int main(){ ... pcl::visualization::CloudViewer viewer("Simple Cloud Viewer"); while (!viewer.wasStopped ()) { viewer.showCloud(cloud); } return 0; } ``` 这段程序会启动一个图形界面让用户直观感受最终成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云登山者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值