PCL点云读取、写入、生成和可视化

这篇博客展示了如何使用Point Cloud Library (PCL)生成一个位于正方体内的随机点云,并将其保存为PCD文件。接着,代码读取该文件并利用PCL进行可视化。通过鼠标操作可以观察到正方体形状的点云。
摘要由CSDN通过智能技术生成

目录

代码功能

代码

运行结果


一个代码完成功能,不需要下载其它的点云文件数据,

代码功能

1.生成一个在正方体内的随机点云;

2.将生成的点云保存为PCD文件;

3.读取PCD文件得到点云;

4.可视化点云;

代码

/*
by   : 手口一斤
date : 2020-12-16
*/

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
int
genwrite()
{
	pcl::PointCloud<pcl::PointXYZ> cloud;
	// 创建点云
	cloud.width = 10000;
	cloud.height = 1;
	cloud.is_dense = false;
	cloud.points.resize(cloud.width * cloud.height);
	
	for (size_t i = 0; i < cloud.points.size(); ++i)
	{
		// 坐标范围在[0,1024),正方体内随机取点
		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));
	}
	pcl::io::savePCDFileASCII("selfgen.pcd", cloud);
	return(0);
}
int
main(int argc, char** argv)
{
	genwrite();

	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

	if (pcl::io::loadPCDFile<pcl::PointXYZ>("selfgen.pcd", *cloud) == -1)//*打开点云文件
	{
		PCL_ERROR("Couldn't read file test_pcd.pcd\n");
		return(-1);
	}

	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new 
    pcl::visualization::PCLVisualizer("3D Viewer"));
	viewer->setBackgroundColor(0, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");

	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
	}

	return(0);
}

运行结果

由于点云是在一个正方体内取得点,动这个视角看,近似一个正方形,用鼠标拖动,可看到一个正方体;

鼠标拖动后:

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值