介绍了两种读取和保存到pcd格式点云的方法;同时介绍了读取根目录下与指定目录下的方法。
读取
一、读取根目录下点云
点云放在整个C++工程中存放.cpp的那个文件夹【当然,你的.cpp需要是在默认路径下新建的,或者添加的是打开的默认目录下的】。
1、使用reader
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // Generate pointcloud data,新建指针cloud存放点云
pcl::PCDReader reader;
reader.read<pcl::PointXYZ>("jiange0.05liqun_100inliers4.pcd", *cloud);//读取pcd文件,用指针传递给cloud。
2、使用loadPCDFile
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // Generate pointcloud data,新建指针cloud存放点云
if (pcl::io::loadPCDFile<pcl::PointXYZ>("resultjiange0.05liqun.pcd", *cloud) == -1)//*打开点云文件。
{
PCL_ERROR("Couldn't read that pcd file\n");
return(-1);//如果没找到该文件,返回-1,跳出整个main函数
}
二、读取指定目录下的点云
以使用loadPCDFile为例。
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // Generate pointcloud data,新建指针cloud存放点云
if (pcl::io::loadPCDFile<pcl::PointXYZ>("E:/实验/PCL实验/RegionGrowRadius/RegionGrowRadius/resultjiange0.05liqun区域增长/resultjiange0.05liqun.pcd", *cloud) == -1)//*打开点云文件。
{ //带路径的格式【注意路径的反斜杠与电脑自己的不同】
PCL_ERROR("Couldn't read that pcd file\n"); // //不带路径的格式【只是把路径删掉即可】
return(-1);
}
写入
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
using namespace std; // 可以加入 std 的命名空间
int
main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr INcloud(new pcl::PointCloud<pcl::PointXYZ>); // 存放提取出来的边界点云
if (pcl::io::loadPCDFile<pcl::PointXYZ>("boudary_200_100.pcd", *INcloud) == -1)//*打开点云文件。
{ //带路径的格式【注意路径的反斜杠与电脑自己的不同】:if (pcl::io::loadPCDFile<pcl::PointXYZ>("E:/rabbit_gra.pcd", *cloud) == -1)
PCL_ERROR("Couldn't read that boundary pcd file\n"); // //不带路径的格式【只是把路径删掉即可】:if (pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit_gra.pcd", *cloud) == -1)
return(-1);
}
//写入磁盘
//写入方法一:
pcl::PCDWriter writer;
writer.write<pcl::PointXYZ>("name_cluster.pcd", *INcloud, false);//将点云保存到PCD文件中
//写入方法二:
pcl::io::savePCDFileASCII("name_cluster.pcd", *INcloud); //将点云保存到PCD文件中
}