这篇博客提供一个PCL读取点云并可视化的最简Demo,并提供扩充学习资料的链接。其中点云读取比较简单,而可视化比较复杂。

PCL的可视化类有好几号,最强大的是PCLvisualizer,这个类是这篇博客的主要内容。如果只是简单显示点云,可以不需要PCLvisualizer类,调用CloudViewer就可以了。CloudViewer的调用过程更加简单直接,PCLvisualizer更加强大,功能更加丰富。

PCLvisualizer还可以设置鼠标键盘操作回调函数,功能之多,并且开源的PCL也在不断丰富和完善,所以在调用PCLvisualizer时,大部分编程是需要参考文档手册的。

点云可视化参考资料

  1. 官方API手册
  2. PCLVisualizer可视化类1
  3. PCLVisualizer可视化类2
  4. PCLVisualizer可视化类3
  5. PCLVisualizer可视化类4
  6. PCLVisualizer可视化类5
  7. PCL可视化深度图像

读取点云并可视化

#include <iostream>
#include <vector>

#include <boost/shared_ptr.hpp>

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>

using pcl::visualization::PointCloudColorHandlerGenericField;
using pcl::visualization::PointCloudColorHandlerCustom;

int main(int argc, char *argv[]){
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (pcl::io::loadPCDFile<pcl::PointXYZ>("../pcd/a1.pcd", *cloud1) == -1){
		std::cerr << "open failed!" << std::endl;
		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");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
	viewer->addCoordinateSystem(1.0);
	viewer->initCameraParameters();

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

	return 0;
}

DEMO代码简单解释

一般在代码最后,都会出现这样一个while循环,在spinOnce中为界面刷新保留了时间

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

createViewPort函数还可以创建多个视口,比如把视窗分为左右两个部分

	p->createViewPort(0.0, 0, 0.5, 1.0, vp_1); //创建左视区
	p->createViewPort(0.5, 0, 1.0, 1.0, vp_2); //创建右视区

每次要刷新点云,都要先删除原先的,再添加新的。

下面这个函数是用来设置显示的点的大小。

     viewer->addCoordinateSystem(1.0);

更多功能参见官方API手册

关于CloudViewer

使用非常简单,但是除了显示什么都不能干:

pcl::visualization::CloudViewer viewer ("Cluster viewer");  
viewer.showCloud(colored_cloud);  
while (!viewer.wasStopped ())  
{}

 

2 对 “PCL读取点云并可视化”的想法;

  1. 您好,我在搜索PCL三维配准的时候看到了您的回答。又看到了您主要的研究方向。我们现在有一个项目,核心内容是提取人前额和鼻子的点云,然后和3D模型进行配准,从而得到坐标变换关系。然后将3D模型上的模拟入路在变换到真人上面。不知道您是否有兴趣。报酬我们可以商量。我的email是 liuyangyangprc@qq.com 您也可以私信联系我

发表评论

邮箱地址不会被公开。 必填项已用*标注