PCL窗口显示点云及可视化问题

addPointCloud, removePointCloud 和 updatePointCloud

先来看以下代码:

///定义一个显示窗口,窗口的名字为3D reviewer
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
// 函数1 addPointCloud()
//向窗口添加点云cloud1,cloud的名字叫“sample cloud”,以后就用‘simple cloud"代替cloud
viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
// 函数2 removePointCloud()
viewer->removePointCloud("sample cloud");
// 函数3 updatePointCloud()
///updatePointCloud相当于先remove"sample cloud",再add"cloud1"
viewer->updatePointCloud(cloud1, "sample cloud");

几个PCL可视化常用的函数

//函数1:设置点云的颜色
///对输入为pcl::PointXYZ类型的点云,着色为红色。其中,source表示真正处理的点云,sources_cloud_color表示处理结果
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> sources_cloud_color(source,250,0,0);

///函数2:在某个固定视图中显示固定颜色的某点云
//双引号中的sources_cloud_v1,表示该点云的”标签“,v1表是添加到哪个视图窗口(pcl中可设置多窗口模式)
view->addPointCloud(source,sources_cloud_color,"sources_cloud_v1",v1);

///函数3:设置点云属性
///其中PCL_VISUALIZER_POINT_SIZE表示设置点的大小为3,双引号中”sources_cloud_v1“,就是步骤2中所说的标签。
view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,"sources_cloud_v1");
 //主要用来设置标签点云的不透明度,表示对标签名字为"sources_cloud_v1"的标签点云设置不透明度为1,也就是说透明度为0. 默认情况下完全不透明。
view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY,1,"sources_cloud_v1");

///函数4:设置显示窗口的背景颜色
viewer->setBackgroundColor (0, 0, 0.7);

函数5:添加需要显示的点云法向。
///cloud为原始点云模型,normal为法向信息,10表示需要显示法向的点云间隔,即每10个点显示一次法向,5表示法向长度,名字、标签为“normal
viewer->addPointCloudNormals<pcl::PointXYZ, pcl::Normal> (cloud, normals, 10, 5, "normals");

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <boost/thread/thread.hpp>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>

int main()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud3(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud4(new pcl::PointCloud<pcl::PointXYZ>);

	pcl::io::loadPCDFile("C:\\Users\\13427\\Desktop\\maize.pcd", *cloud1);
	pcl::io::loadPCDFile("C:\\Users\\13427\\Desktop\\room_scan1.pcd", *cloud2);
	pcl::io::loadPCDFile("C:\\Users\\13427\\Desktop\\maize.pcd", *cloud3);
	pcl::io::loadPCDFile("C:\\Users\\13427\\Desktop\\room_scan1.pcd", *cloud4);

	pcl::PointCloud<pcl::PointXYZ>::Ptr data[] = { cloud1,cloud2,cloud3,cloud4 };

	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
	viewer->setBackgroundColor(0, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud1, "sample cloud");
	//viewer->addPointCloud<pcl::PointXYZ>(cloud2, "sample cloud1");
	//viewer->removePointCloud("sample cloud1");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
	viewer->addCoordinateSystem(1.0);
	viewer->initCameraParameters();

	int i = 1;
	while (!viewer->wasStopped()) {
		viewer->updatePointCloud(data[i], "sample cloud");
		i = (i + 1) % 4;
		viewer->spinOnce(1000);
	}
	return 0;
}
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页