- 从PCD文件中读取与保存点云数据
#include <iostream> //标准c++库输入输出相关头文件 #include <pcl/io/pcd_io.h> // pcd读写相关头文件 #include <pcl/point_types.h> // pcl中支持的点类型头文件 typedef pcl::PointXYZ PointT;//这样写可以帮我们后面少些几个字母 int main(int argc, char** argv) { // 定义点云 pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);//如果上面没用typedef定义,这里就得这样写 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 读取点云,失败返回-1 if (pcl::io::loadPCDFile<PointT>("readName.pcd", *cloud) == -1) { PCL_ERROR("couldn't read file\n"); return (-1); } // 输出点云大小 cloud->width * cloud->height std::cout << "点云大小:" << cloud->size() << std::endl; // 保存点云文件 pcl::io::savePCDFile("saveName.pcd", *cloud); system("pause"); // windows命令行窗口暂停 return (0); }
2.向PCD文件中写入点云数据
- 首先包含头文件
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
- 实例化点云类
pcl::PointCloud<pcl::PointXYZ> cloud;//后面的cloud是我们起的类名字,也可以是cloud,一般这样写
- 下面来创建点云
cloud.width=8;
cloud.height=1;
cloud.is_dense=false;
cloud.points.resize(cloud.width*cloud.height);
for(size_t=i;i<cloud.points.size();i++)
{
cloud.points[i].x=1024*rand()/(RAND_MAX+1.0f);
cloud.points[i].y=1024*rand()/(RAND_MAX+1.0f);
cloud.points[i].z=1024*rand()/(RAND_MAX+1.0f);//生成0-1024的随机数
}
- 接下来把点云的数据存在名为learn_1.pcd文件中
pcl::io::savePCDFILEASCII(“learn_1.pcd",cloud);
- 最后可以打印出刚才存储的点云数据
for(size_t=i;i<cloud.points.size();i++)
{
std::cout<<cloud.points[i].x<<","<<cloud.points[i].y<<","<<cloud.points[i].z<<std::endl;
}
- 最后编译运行大家就可以看见自己随机生成的点啦!
- !!!ply的”点云“数据读取方法一样,只需要将pcd改成ply即可