ch07——7.3.3PCLVisualizer可视化类,本例显示了第八项自定义交互,版本(vs2017+pcl1.9)。

本文详细介绍了PCLVisualizer可视化类的使用,包括显示点云、颜色特征、法线、绘制形状及多视口功能。特别强调了第八项自定义交互,即右击窗口显示2D文本标签并可通过r键清除,以及在VS2017和PCL1.9环境下实现这一功能的难点与解决方案。
摘要由CSDN通过智能技术生成

ch07——7.3.3PCLVisualizer可视化类
1.与CloudViewer可视化类相比,PCLVisualizer具有更复杂的功能,如显示法线、绘制多种形状和多个视口。

2.可视化单个点云函数
可视化显示具有XYZ信息的点云,改变背景颜色和显示坐标轴。

//2.可视化单个点云
boost::shared_ptr<visualization::PCLVisualizer> simpleVis(PointCloud<PointXYZ>::ConstPtr cloud)
{
   
	//创建视窗对象并给标题栏定义一个名称:3D Viewer,定义为boost::shared_ptr
	//智能共享指针,保证该指针在整个程序全局使用,不引起内存错误,通常情况下不需要这样做
	boost::shared_ptr<visualization::PCLVisualizer> viewer(new visualization::PCLVisualizer("3D Viewer"));
	viewer->setBackgroundColor(0, 0, 0);//视窗背景设置为黑色
	//将点云添加到视窗对象并定义一个唯一的字符串作为id号
	viewer->addPointCloud<PointXYZ>(cloud, "sample cloud");
	viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
	//显示坐标轴
	viewer->addCoordinateSystem(1.0);
	//设置照相机参数使用户从默认角度和方向观察点云
	viewer->initCameraParameters();
	return (viewer);
}

3.可视化点云颜色特征

//3.可视化点云颜色特征
boost::shared_ptr<visualization::PCLVisualizer> rgbVis(PointCloud<PointXYZRGB>::ConstPtr cloud) 
{
   
	boost::shared_ptr<visualization::PCLVisualizer> viewer(new visualization::PCLVisualizer("3D Viewer"));
	viewer->setBackgroundColor(0, 0, 0);//视窗背景设置为黑色
	//创建颜色自定义处理对象
	pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
	viewer->addPointCloud<pcl::PointXYZRGB>(cloud,rgb,"sample cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,"sample cloud");
	viewer->addCoordinateSystem(1.0);
	viewer->initCameraParameters();
	return viewer;
}

4.可视化点云自定义颜色特征
给点云单独着上一种颜色

//4.可视化点云自定义颜色特征
boost::shared_ptr<visualization::PCLVisualizer> customColourVis(PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
   
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3d viewer"));
	viewer->setBackgroundColor(0,0,0);
	//自定义颜色处理器,设置绿色
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0, 255, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud,single_color,"sample cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,"sample cloud");
	viewer->addCoordinateSystem(1.0);
	viewer->initCameraParameters();
	return viewer;
}

5.可视化点云法线和其他特征

//5.可视化点云法线和其他特征
boost::shared_ptr<visualization::PCLVisualizer> normalsVis(PointCloud <PointXYZRGB> ::ConstPtr cloud, PointCloud<Normal>::ConstPtr normals)
{
   
	boost::shared_ptr<visualization::PCLVisualizer> viewer(new visualization::PCLVisualizer("3d viewer"));
	viewer->setBackgroundColor(0,0,0);
	visualization::PointCloudColorHandlerRGBField<PointXYZRGB> rgb(cloud);
	viewer->addPointCloud<PointXYZRGB> (cloud,rgb,"sample cloud");
	viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_POINT_SIZE,3,"sample cloud");
	//实现点云法线显示(每10个点显示一个,0.5代表法线长度)
	viewer->addPointCloudNormals<PointXYZRGB,Normal> (cloud, normals,10,0.5,"normals)");
	viewer->addCoordinateSystem(1.0);
	viewer->initCameraParameters();
	return viewer;
}

6.绘制普通形状
从点云中的第一个点到最后一个点之间的连线、原点所在平面、以点云中第一个点为中心的球体、沿y轴的椎体。

//6.绘制普通形状
boost::shared_ptr<visualization::PCLVisualizer> shapesVis(PointCloud <PointXYZRGB> ::ConstPtr cloud)
{
   
	boost::shared_ptr<visualization::PCLVisualizer> viewer(new visualization::PCLVisualizer("3d viewer"));
	viewer->setBackgroundColor(0, 0, 0);
	pcl::visualization::PointCloudColorHandlerRGBField<PointXYZRGB> rgb(cloud);
	viewer->addPointCloud<PointXYZRGB>(cloud,rgb,"sample cloud");
	viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_POINT_SIZE,3,"sample cloud");
	viewer->addCoordinateSystem(1.0);
	viewer->initCameraParameters();
	//在点云上添加直线和球体模型
	//从第一个点到最后一个点的连线
	viewer->addLine<PointXYZRGB>(cloud->points[0],cloud->points[cloud->size()-1],"line");
	//添加以点云第一个点为中心,半径0.2球体,同时为球体定义颜色
	viewer->addSphere<PointXYZRGB>(cloud->points[0],0.2,0.5,0.5,0.0,"sphere");
	//在其他位置添加基于模型参数的平面及圆锥体
	//添加绘制平面,用ax+by+cz+d=0定义平面,以原点为中心,方向沿z,许多绘制形状的函数都采用这种定义系数的方法来定义形状。
	pcl::ModelCoefficients coeffs;
	coeffs.values.push_back(0.0);
	coeffs.values.push_back(0.0);
	coeffs.values
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值