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