PCL常用代码总结(三):可视化

1. CloudViewer点云可视化

#include <pcl/visualization/cloud_viewer.h>

//【1】创建CloudViewer对象
pcl::visualization::CloudViewer viewer("Cloud Viewer");    

//【2】显示点云
viewer.showCloud(cloud);

//【3】线程注册函数
//该注册函数在可视化时只调用一次
viewer.runOnVisualizationThreadOnce (viewerOneOff);
//该注册函数在渲染输出时每次都调用
viewer.runOnVisualizationThread (viewerPsycho);

//【4】其他处理
while (!viewer.wasStopped ())
{
//在此处可以添加其他处理
}

2. PCLVisualizer可视化(文字,图形)

PCLVisualizer是PCL的全功能可视化类。虽然使用比CloudViewer更复杂,但功能更强大,可提供显示法线,绘图形状和多个视口等功能。

#include <pcl/visualization/pcl_visualizer.h>

//定义一个
pcl::visualization::PCLVisualizer viewer ("3D Viewer");

//【1】更改窗体背景RGB
viewer.setBackgroundColor (1.0, 0.5, 1.0);

//【2】添加一个球体
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
// 球心 半径 id 视角(可以认为是subplot)
viewer.addSphere (o, 0.25, "sphere", 0);

//【3】添加文字 
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
//string字符 x坐标 y坐标 id 视角
viewer.addText (ss.str(), 200, 300, "text", 0);

//【4】添加点云
//设置点云显示的RGB
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointWithRange> range_image_color_handler (range_image_ptr, 0, 0, 0);
//添加点云,并添加RGB
viewer.addPointCloud (range_image_ptr, range_image_color_handler, "range image");

//【3】移除
// id 视角
viewer.removeShape ("text", 0);

//【4】设置点云渲染属性
viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "range image");

//【5】显示viewer窗口
viewer.spinOnce ();
pcl_sleep (0.01);

//【6】视角变换
//以默认值初始化相机参数
viewer.initCameraParameters ();
//定义一个变换矩阵
Eigen::Affine3f scene_sensor_pose (Eigen::Affine3f::Identity ());
//获得当前的相机视角
scene_sensor_pose = viewer.getViewerPose();

在viewer上无论添加点云还是text还是添加一个球,都需要一个string格式的id。

3. RangeImageVisualizer深度图像可视化

深度图像(Depth Images)也被称为距离影像(Range Image),是指将从图像采集器到场景中各点的距离值作为像素值的图像。

#include <pcl/range_image/range_image.h> //深度图像接口
#include <pcl/visualization/range_image_visualizer.h> //深度图像显示接口
#include <pcl/visualization/pcl_visualizer.h> //PCLVisualizer接口
#include <pcl/common/common_headers.h> //包括角度转换和eigen库接口

//【1】定义一个RangeImage深度图像实例对象
pcl::RangeImage& range_image = *range_image_ptr;   

//【2】根据输入的点云数据,按照设置的参数,生成深度图像
/**angular_resolution为模拟的深度传感器的角度分辨率,
  *即深度图像中一个像素对应的角度大小,max_angle_width
  *为模拟的深度传感器的水平最大采样角度,max_angle_height
  *为模拟传感器的垂直方向最大采样角度,sensor_pose设置模拟的
  *深度传感器的位姿是一个仿射变换矩阵,默认为4*4的单位矩阵变换,
  *coordinate_frame定义按照那种坐标系统的习惯默认为CAMERA_FRAME,
  *noise_level获取深度图像深度时,近邻点对查询点距离值的影响水平,
  *min_range设置最小的获取距离,小于最小获取距离的位置为传感器的盲区,
  *border_size获得深度图像的边缘的宽度 默认为0 
  *该函数中涉及的角度的单位都是弧度
***/
range_image.createFromPointCloud (point_cloud, angular_resolution, pcl::deg2rad (360.0f), pcl::deg2rad (180.0f), scene_sensor_pose, coordinate_frame, noise_level, min_range, border_size);

//【3】定义一个RangeImageVisualizer对象,id
pcl::visualization::RangeImageVisualizer range_image_widget ("Range image");

//【4】在RangeImageVisualizer对象窗口上显示深度图像
range_image_widget.showRangeImage (range_image);

☆参考

https://www.cnblogs.com/li-yao7758258/p/6474699.html

https://blog.youkuaiyun.com/shuiyixin/article/details/89057463

https://pcl.readthedocs.io/projects/tutorials/en/latest/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值