pcl可视化:在一个视图窗口下显示两片点云,并设置点云颜色及背景色

       在点云可视化时,有时需要在一个视图窗口下展示两张点云图,方便对比。pcl::visualization::PCLVisualizer为加载多张点云图的可视化类,与常规的可视化类pcl::visualization::CloudViewer相比,该类不仅可以设置窗口背景色、点云的颜色信息,还能将一个窗口分为若干小窗口,同时加载多张点云图。

      下面列出几行关键代码作分析:

       

	int v1(0);
	viewer->createViewPort(0.0, 0.0, 1.0 / 2.0, 1.0, v1);
	viewer->setBackgroundColor(28, 28, 28, v1);
	viewer->addText("Radius:0.01", 10, 10, "v1 text", v1);
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_color(source, 0, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(source, source_color, "sample cloud1", v1);
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");

其中 viewer->createViewPort(0.0, 0.0, 1.0 / 2.0, 1.0, v1)中各参数依次为可视化小窗口的xmin,ymin,xmax,ymax,v1为该窗口的唯一标识,由于本文显示两张点云图,因此将xmax设置成1.0/2.0;viewer->setBackgroundColor(28, 28, 28, v1)为设置背景色RGB; viewer->addText("Radius:0.01", 10, 10, "v1 text", v1)为增加一个文本标签;PointCloudColorHandlerCustom<pcl::PointXYZ> source_color(source, 0, 0, 0)为设置点云的颜色,本文设置成黑色;viewer->addPointCloud<pcl::PointXYZ>(source, source_color, "sample cloud1", v1)该代码为将点云添加到指定的可视化小窗口中。最后一行代码中第一个参数为点云可视化的类别属性,第二个参数为一个double值,通常为3就行,第三个参数为点云ID值,最后其实还有一个默认参数,int viewport=0,当不更改其值时,该方法将作用于所有视图,如不同点云的同步移动、旋转、放大、缩小操作。

最后附上完整代码及显示情况。

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/filter_indices.h>
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;

int main()
{

	//***************************read PCD file*****************************************
	//在一个视图下同时显示两张点云图像

	pcl::PointCloud<pcl::PointXYZ>::Ptr source(new pcl::PointCloud<pcl::PointXYZ>());
	pcl::PointCloud<pcl::PointXYZ>::Ptr source2(new pcl::PointCloud<pcl::PointXYZ>());
	//输入点云路径
	string  filename1 = "jiancelou.pcd";
	string filename2 = "jiancelou(4).pcd";
	pcl::io::loadPCDFile(filename1, *source);
	pcl::io::loadPCDFile(filename2, *source2);
	cout << "点云加载成功!" << endl;
	boost::shared_ptr< pcl::visualization::PCLVisualizer > viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
	viewer->initCameraParameters();
	
	
	//在一个视图里显示两张点云图
	int v1(0);
	viewer->createViewPort(0.0, 0.0, 1.0 / 2.0, 1.0, v1);
	viewer->setBackgroundColor(28, 28, 28, v1);
	viewer->addText("Radius:0.01", 10, 10, "v1 text", v1);
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_color(source, 0, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(source, source_color, "sample cloud1", v1);

	int v2(0);
	viewer->createViewPort(1.0 / 2.0, 0.0, 1.0, 1.0, v2);
	viewer->setBackgroundColor(28, 28, 28, v2);
	viewer->addText("Radius:0.1", 10, 10, "v2 text", v2);
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_color2(source2, 0, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(source2, source_color2, "sample cloud2", v2);

	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud2");

	viewer->addCoordinateSystem(1.0);
	viewer->spin();
	return 0;

}

该代码不仅限于同时显示两张点云,可根据需要增设小窗口,更改坐标参数等,就可同时显示多张点云图。

欢迎大家批评指正,可在评论区留言。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值