在本教程中,我们将学习如何从PCD文件中读取点云数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h>
int main(int argc,char** argv){ //创建一个格式为PointXY的空点云对象,用于盛放读入的.pcd数据 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); //在下面的if函数中,我们尝试读取.pcd文件,如果读取成功,则将其放入cloud中,否则就报错退出程序 if(pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd".*cloud)==-1){ PCL_ERROR("cloud not read file test_pcd.pcd \n"); return (-1); } /*我们也可以读取PCLPointCloud2类型,而且由于点云的动态性质,我们更希望它们读取为二进制的形式, 然后将其转换为我们想要的点云形式,示例代码如下: pcl::PointCloud2 cloud_blob;//创建空对象盛饭读入的二进制点云数据 pcl::io::loadPCDFile("test_pcd.pcd",cloud_blob);//将读入的点云数据存放至前面定义的空对象中 pcl::formPCLPointCloud2(cloud_blob,*cloud);//将点云数据转换为XYZ格式的点云 */ std::cout<<"loaded" <<cloud->width*cloud->cloud->height <<" data points from test_pcd.pcd with the following fields" <<std::endl; for(const auto& point:*cloud){ std::cout << "x:"<<point.x <<"y:"<<point.y <<"z:"<<point.z<<std::endl; } return (0); }
|