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;
}