pcl点云库pcd文件的读取与写入

  1. 从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即可
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值