PCLVisualizer可视化类(1)
PCLVisualizer可视化类是PCL中功能最全的可视化类,与CloudViewer可视化类相比,PCLVisualizer使用起来更为复杂,但该类具有更全面的功能,如显示法线、绘制多种形状和多个视口。本小节将通过示例代码演示PCLVisualizer可视化类的功能,从显示单个点云开始。大多数示例代码都是用于创建点云并可视化其某些特征。
代码
首先,在PCL(Point Cloud Learning)中国协助发行的书提供光盘的第7章例3文件夹中,打开名为pcl_visualizer_demo.cpp的代码文件。
编译并运行程序
利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成执行文件后,就可以运行了,在cmd中键入命令:
...>pcl_visualizer_demo.exe -h
上面命令可以在标准输出设备上打印出帮助信息,提示用户测试哪种可视化试验,通过改变选项改变所运行的不同可视化特征实例,如果需要更详细的细节信息,命令为打印帮助文档,按q键,退出视窗应用程序,按r键,居中并缩放以可见整个点云,使用鼠标,通过点击和拖动旋转视窗,使用鼠标滚轮,或右键单击并上下拖动,实现放大和缩小,滚轮点击或拖动,将会移动视窗。
可视化单个点云
该示例应用PCLVisualizer可视化类显示单个具有XYZ信息的点云,如图1所示,该程序也实现了改变背景颜色和显示坐标轴的功能,代码在simpleVis函数中。

图1可视化单个点云示例
simpleVis函数实现最基本的点云可视化操作,下面我们逐行解析该程序。
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
创建视窗对象,并给标题栏定义一个名称"3D Viewer",我们将它定义为boost::shared_ptr智能共享指针,这样可以保证该指针在整个程序全局使用,而不引起内存错误,通常情况下,用户不需要这样做。
viewer->setBackgroundColor (, , );
视窗的背景色可以设为用户喜欢的任意RGB颜色,本例中,我们将它设置为黑色。
viewer->addPointCloud<pcl::PointXYZ> (cloud, "sample cloud");
这是最重要的一行,我们将点云添加到视窗对象中,并定义一个唯一的字符串作为ID号,利用此字符串保证在其他成员方法中也能标识引用该点云,多次调用addPointCloud(),可以实现多个点云的添加,每调用一次就创建一个新的ID号,如果想更新一个已经显示的点云,用户必须先调用removePointCloud(),并提供需要更新的点云的ID号。(注:PCL 的1.1及以上版本提供一个新的API,updatePointCloud(),通过该接口,不必手动调用removePointCloud(),就可实现点云的更新)。这是addPointCloud()函数诸多重载函数中最基本的一种,其他类型的函数用于处理不同类型的点云、显示法线等。在本教程中,我们会讲解其他函数,或者用户也可通过PCLVisualizer API手册查看更详细的说明。
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, , "sample cloud");
下面的命令行用于改变显示点云的尺寸。用户可以利用该方法控制点云在视窗中的显示方式。
viewer->addCoordinateSystem (1.0);
查看复杂的点云经常会让用户感到没方向感,为了让用户保持正确的坐标判断,需要显示坐标系统方向,可以通过使用X (红色)、Y (绿色) 、Z (蓝色)圆柱体代表坐标轴的显示方式来解决,圆柱体的大小通过scale参数控制。本例中,我们将scale参数设置为1.0,该值也为缺省值,该方法的另一重载函数可实现对点云中的每个点的坐标方向进行显示。
viewer->initCameraParameters ();
最后的调用通过设置相机参数使用户从默认的角度和方向观察点云。
对于所有示例来说,还有一段最后的代码,都在每个示例的末尾:
while (!viewer->wasStopped ())
{
viewer->spinOnce ();
boost::this_thread::sleep (boost::posix_time::microseconds ());
}
上面几行代码在执行一个while循环,每次调用spinOnce都给视窗处理事件的时间,这样允许鼠标键盘等交互操作,此外还有一种spin的重载方法,它只需调用一次。
PCLVisualizer可视化类(1)的更多相关文章
- PCLVisualizer可视化类
PCLVisualizer可视化类 转载自 http://www.cnblogs.com/li-yao7758258/p/6445127.html 如有疑问,请转至该网址留言询问 PCLVisuali ...
- PCLVisualizer可视化类(4)
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=168 多视口显示 所示,并进行比较分析,利用不同的搜索半径,基于同一点云计算 ...
- PCLVisualizer可视化类(3)
viewer->addLine<pcl::PointXYZRGB> (cloud->points[0], cloud->points[cloud->size() - ...
- PCLVisualizer可视化类(2)
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=163 可视化点云颜色特征 所示,点赋予不同的颜色表征其对应的z轴值不同.PC ...
- PCLVisualizer可视化类(5)
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=171 自定义交互 多数情况下,默认的鼠标和键盘交互设置不能满足用户的需求,用 ...
- 基于PCL绘制模型并渲染
博客转载自:https://blog.csdn.net/wokaowokaowokao12345/article/details/51321988 前言 抛开算法层面不谈,要利用PCL库中PCLVis ...
- PCL可视化显示 直接加载显示pcb文件
简单可视化类,是指直接在程序中使用,而且不支持多线程. #include<iostream> #include<pcl\point_cloud.h> #include<p ...
- [翻译] FastReport Class Hierarchy (FastReport 组件类层次结构)
"TfrxComponent" is the base class for all FastReport components. Objects of this type have ...
- 数据可视化:绘图库-Matplotlib
为什么要绘图? 一个图表数据的直观分析,下面先看一组北京和上海上午十一点到十二点的气温变化数据: 数据: 这里我用一段代码生成北京和上海的一个小时内每分钟的温度如下: import random co ...
随机推荐
- hd acm1018
Problem Description In many applications very large integers numbers are required. Some of these app ...
- etcd -> Highly-avaliable key value store for shared configuration and service discovery
The name "etcd" originated from two ideas, the unix "/etc" folder and "d&qu ...
- LINQ 学习路程 -- 查询操作 Average Count Max Sum
IList<, , }; var avg = intList.Average(); Console.WriteLine("Average: {0}", avg); IList ...
- 算法(Algorithms)第4版 练习 2.2.11(3)
关键代码实现: public static void sort(Comparable[] input) { int N = input.length; aux = input.clone();//mu ...
- linux学习系列一
1. 基本命令(注意参数的大小写) 学习linux如果使用的是windows 建议使用一个很好用的工具git,下载安装即可使用linux下的命令来操作windows 1.1目录及文件 注意/ 有表示根 ...
- ThinkPad.E440_安装固态硬盘
1.ThinkPad(E440) 加装SSD固态硬盘,并改装双硬盘_百度经验.html(https://jingyan.baidu.com/article/9f63fb91856ec7c8400f0e ...
- BZOJ 1656 [Usaco2006 Jan] The Grove 树木:bfs【射线法】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1656 题意: 给你一个n*m的地图,'.'表示空地,'X'表示树林,'*'表示起点. 所有 ...
- 分享知识-快乐自己:springboot之thymeleaf (1):简单的thymeleaf例子
之前搞springboot时,发现spring很推荐thymeleaf,所以看了看学了学,感觉不错,做个笔记先. 做个简单和例子,项目是springboot,所以引入themeleaf相关包 pom. ...
- poj3177边-双连通分量
题意和poj3352一样..唯一区别就是有重边,预先判断一下就好了 #include<map> #include<set> #include<list> #incl ...
- python-编译安装Python2.7
yum中最新的也是Python 2.6.6,只能下载Python 2.7.5的源代码自己编译安装. 操作步骤如下: 1)下载并解压Python 2.7.9的源代码 cd /opt wget --no- ...