(十三)Visualization教程一
来源:互联网 发布:mac打开刚关闭的网页 编辑:程序博客网 时间:2024/04/28 03:06
CloudViewer
如果你只是想简单的显示一幅点云,那么CloudViewer会是一个不错的选择。
注意CloudViewer类不能用在多线程
实例
头文件
#include <pcl/visualization/cloud_viewer.h>
程序
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;//... populate cloudpcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");viewer.showCloud (cloud);while (!viewer.wasStopped ()){}
PCLVisualizer
PCLVisualizer类包含了PCL用于可视化的所有功能。虽然比CloudViewer使用起来更加困难,但是功能也更加强大,比如显示法线,绘制三维图形,多窗口视图等。
我们先从最基本的功能–显示一个点云开始我们的教程:
一、显示点云
步骤
- 初始化PCLVisualizer
pcl::visualization::PCLVisualizer viewer("viewer_1");
viewer_1为显示窗口标题栏上的名称。
- 向PCLVisualizer载入点云
viewer.addPointCloud(cloudIn.makeShared(), "cloud1");
因为在窗口中我们可以依次载入多个不同的点云,为了以后分别对这些点云进行操作,我们在载入点云的时候给它一个唯一的ID标识符,比如这里的“cloud1”。
- 循环显示
// 循环显示viewer.spin();
运行结果
至此,我们可以简单的显示一个点云了,但是为了在可视化窗口显示出更多的信息,对点云进行更多的操作,我们还要进一步探索
二、修改可视化的渲染属性
给点云附上颜色
- 初始化一个PointCloudColorHandlerCustom类,初始化参数分别是:要上颜色的点云,r,g,b。
// 给点云附上颜色pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloudIn.makeShared(), 255, 0, 0);
- 载入点云时,以参数的将初始化了的PointCloudColorHandlerCustom类带入
// 载入一个点云viewer.addPointCloud(cloudIn.makeShared(),single_color, "cloud1");
修改渲染属性
PCL中的渲染属性分为以下几种
enum RenderingProperties{ PCL_VISUALIZER_POINT_SIZE, 点的大小 PCL_VISUALIZER_OPACITY, 透明度 PCL_VISUALIZER_LINE_WIDTH, 线宽 PCL_VISUALIZER_FONT_SIZE, 字体大小 PCL_VISUALIZER_COLOR, 颜色 PCL_VISUALIZER_REPRESENTATION, PCL_VISUALIZER_IMMEDIATE_RENDERING, PCL_VISUALIZER_SHADING};
设置某一个渲染属性:
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2,"cloud1");
注意,参数里面要选择一个点云ID,表明是对哪个点云进行属性修改
三、设置参数
可视化窗口为我们模拟了人的眼睛,这个“眼睛”又是可以通过设置改变其参数的,我们通过设置不同的参数,在这个窗口中可以有不一样的感受。
添加3D图形
PCL自带了许多简单的3D图形,比如3D文字,直线,平面,球,圆锥,坐标轴等。这可以被用来显示点云处理后的结果,比如,我们可以画出一个透明的球体,然后看下点云中哪些点应该属于这个球。
这里就只举一个直线的例子,其他都大同小易:
// 添加直线viewer.addLine(pcl::PointXYZ(0, 0, 0), pcl::PointXYZ(1, 1, 1));
设置背景颜色
// 设置背景viewer.setBackgroundColor(0, 1, 0);
设置相机参数
初始化相机参数
// 初始化相机参数viewer.initCameraParameters();
获取相机列表
// 获取相机列表std::vector<pcl::visualization::Camera> camera;viewer.getCameras(camera);
设置相机FOV
// 设置相机FOVviewer.setCameraFieldOfView(0.785398); // fov 大概45度
设置相机位置
viewer.setCameraPosition( 0, 0, 5, // camera位置 0, 0, 4, // view向量--相机朝向 0, 1, 5 // up向量 );
设置相机参数
viewer.setCameraParameters(camera[0]);
四、多视口视图
// 多窗口int v1 = 0;viewer.createViewPort(0.0, 0.0, 0.5, 1.0, v1);int v2 = 1;viewer.createViewPort(0.5, 0.0, 1.0, 1.0, v2);
五、可视化窗口的交互
事件函数
void keyboardEventOccurred(const pcl::visualization::KeyboardEvent &event, void* viewer_void){ pcl::visualization::PCLVisualizer *viewer = static_cast<pcl::visualization::PCLVisualizer *> (viewer_void); if (event.getKeySym() == "r" && event.keyDown()) { std::cout << "r was pressed => removing all text" << std::endl; char str[512]; for (unsigned int i = 0; i < text_id; ++i) { sprintf(str, "text#%03d", i); viewer->removeShape(str); } text_id = 0; }}
注册事件
// 交互viewer.registerKeyboardCallback(keyboardEventOccurred);
0 0
- (十三)Visualization教程一
- (十四)Visualization教程二
- Qt Data Visualization 安装教程
- NeHe OpenGL教程 (十三)
- Golang教程:(十三)Map
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
- Deep Visualization Toolbox+Caffe详细安装教程
- shell十三问(一)
- 十三周任务(一)
- d3学习之(Data Visualization with d3.js Cookbook )一
- 图可视化(Graph Visualization)
- c++教程(十三(上):Pointers)
- c++教程(十三(下):Pointers)
- NeHe OpenGL教程 (二十三)
- Swift中文教程(十三) 继承
- Swift中文教程(十三) 继承
- Python 读取xml数据,cv2裁剪图片
- 归并求逆序数
- Java枚举类浅析
- tomcat 部署项目出现Error thrown in preDeregister method
- pragma gcc optimize
- (十三)Visualization教程一
- 微信支付 body不是UTF编码格式
- vb.net 教程 2-11 错误处理
- Mybatis增删改查
- (十四)Visualization教程二
- pickle 模块
- PAT A1082. Reading Number in Chinese
- Struts2(二)struts.xml详解
- 使用service的startservice 和bindservice方法实现音乐的播放、暂停、继续