前言
一种图像数据与激光雷达点云数据融合的c/c++方法实现,使用图像像素值给对应的点云着色。基于PCL点云库、OpenCV库、kitti数据集。
一、准备
1)运行环境:Ubuntu16.04(18.04也可)
2)安装OpenCV库;
3)安装PCL库;
4)kitti数据集,中的1组png图像及对应的bin点云文件,及坐标变换说明txt文件;
5)bin2pcd的app,用于把kitti数据集的bin点云文件转换成pcd文件。
参考:ubuntu16.04下用pcl库将点云bin文件转成pcd文件
二、点云图像融合(点云着色)
1. 数据读入
使用OpenCV读入png图像文件;使用PCL读入对应的pcd点云文件;
//图像读入
Mat img = imread(“000005.png”);
//点云读入
pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::io::loadPCDFile (“5.pcd”, *point_cloud_ptr);


2. 变换矩阵准备
根据kitti数据集采集时标定的坐标转换公式,来计算由点云坐标中的点x(x, y, z, 1)到图像坐标中的y(u, v, 1)的变换:

其中,T为坐标变换旋转平移矩阵;
R(0)为各摄像头到摄像头0的修正矩阵;
P为各摄像头的内参矩阵;
在工程计算时需对各矩阵进行行列扩展:

各矩阵的元素值在kitti数据集的对应的calib/文件夹下:

提前计算出P * R * T,用于下一步的坐标变换:
Mat trans = Mat(3,4,CV_32FC1);
trans = P2 * R0_rect * Tr_velo_

本文介绍了一种在C/C++中利用PCL、OpenCV库和Kitti数据集进行点云图像融合的方法,通过图像像素值为点云着色。步骤包括数据读入、变换矩阵计算、坐标变换和点云显示,最终实现了点云数据与图像数据的融合。
——基于PCL、OpenCV和kitti数据集&spm=1001.2101.3001.5002&articleId=112008354&d=1&t=3&u=48803b6334f940a6a764ef753dd2890e)
2476

被折叠的 条评论
为什么被折叠?



