PCL 可视化
可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术,
pcl_visualization库建立了能够快速建立原型的目的和可视化算法对三维点云数据操作的结果。类似于opencv的highgui例程显示二维图像,在屏幕上绘制基本的二维图形,库提供了以下几点:
(1)渲染和设置视觉特性的方法(如颜色、大小、透明度等)在PCL任意n维的点云数据集pcl::PointCloud<T> format

(2)在屏幕上绘制基本的3D形状的方法(例如,圆柱体,球体,线,多边形等),无论是从点集或参数方程;

(3)一个直方图可视化模块(pclhistogramvisualizer)的二维图;

(4)大量的几何和颜色处理pcl::PointCloud<T> datasets

(5)a pcl::RangeImage 可视化模块
.
1. class pcl::visualization::CloudViewer 类CloudViewer实现创建点云可视化的窗口,以及相关的可视化功能
Public Member Functions |
|
| CloudViewer (const std::string &window_name) 构建可视化点云窗口,窗口名为window_name | |
| ~CloudViewer () 注销窗口相关资源 | |
| void | showCloud (const ColorCloud::ConstPtr &cloud, const std::string &cloudname="cloud") |
| 可视化窗口显示cloud对应的点云,考虑到多个点云用键值cloudname来限定是哪一个点云 | |
| bool | wasStopped (int millis_to_wait=1) |
| 判断用户是否已经关闭窗口,如果是则需要注销窗口 | |
| void | runOnVisualizationThread (VizCallable x, const std::string &key="callable") |
| 在窗口运行期间处理x的回调函数,key为键值标识此回调函数,知道窗口关闭 | |
| void | runOnVisualizationThreadOnce (VizCallable x) |
| 值调用回调函数一次 | |
| void | removeVisualizationCallable (const std::string &key="callable") |
| 删除key对应的回调函数 | |
| boost::signals2::connection | registerKeyboardCallback (void(*callback)(const pcl::visualization::KeyboardEvent &, void *), void *cookie=NULL) |
| 注册键盘事件回调函数,cookie为回调时的参数,callback为回调函数的指针 | |
| template<typename T > | |
| boost::signals2::connection | registerKeyboardCallback (void(T::*callback)(const pcl::visualization::KeyboardEvent &, void *), T &instance, void *cookie=NULL) |
| 同上,其中的instance 指向是实现该回到函数的对象 | |
(2)太多了这里就贴出所有的关于可视化的类 对于类的成员就不再一一介绍
等等*****************************************8
应用实例
cloud_viewer.cpp:
#include <pcl/visualization/cloud_viewer.h> //类cloud_viewer头文件申明
#include <iostream> //标准输入输出头文件申明
#include <pcl/io/io.h> //I/O相关头文件申明
#include <pcl/io/pcd_io.h> //PCD文件读取 /**********************************************************************************
函数是作为回调函数,在主函数中只注册一次 ,函数实现对可视化对象背景颜色的设置,添加一个圆球几何体
*********************************************************************************/
int user_data; void
viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor (1.0, 0.5, 1.0); //设置背景颜色
pcl::PointXYZ o; //存储球的圆心位置
o.x = 1.0;
o.y = ;
o.z = ;
viewer.addSphere (o, 0.25, "sphere", ); //添加圆球几何对象
std::cout << "i only run once" << std::endl; }
/***********************************************************************************
作为回调函数,在主函数中注册后每帧显示都执行一次,函数具体实现在可视化对象中添加一个刷新显示字符串
*************************************************************************************/
void
viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = ;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape ("text", );
viewer.addText (ss.str(), , , "text", ); //FIXME: possible race condition here:
user_data++;
}
/**************************************************************
首先加载点云文件到点云对象,并初始化可视化对象viewer,注册上面的回
调函数,执行循环直到收到关闭viewer的消息退出程序
*************************************************************/
int
main ()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>); //声明cloud
pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud); //加载点云文件 pcl::visualization::CloudViewer viewer("Cloud Viewer"); //创建viewer对象 //showCloud函数是同步的,在此处等待直到渲染显示为止
viewer.showCloud(cloud); //该注册函数在可视化的时候只执行一次
viewer.runOnVisualizationThreadOnce (viewerOneOff); //该注册函数在渲染输出时每次都调用
viewer.runOnVisualizationThread (viewerPsycho);
while (!viewer.wasStopped ())
{
//此处可以添加其他处理
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
user_data++;
}
return ;
}
编译结果如下

未完待续*************************8888888
PCL 可视化的更多相关文章
- PCL可视化显示 直接加载显示pcb文件
简单可视化类,是指直接在程序中使用,而且不支持多线程. #include<iostream> #include<pcl\point_cloud.h> #include<p ...
- PCL:PCL可视化显示点云
(1):引用:仅仅是简单的显示点云,可以使用CloudViewer类.这个类非常简单易用.但要注意,它不是线程安全的.如果要用于多线程,还要参考PCLVisualizer. 需要注意的是,PointC ...
- PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视 ...
- PCL深度图像(2)
(1)点云到深度图与可视化的实现 区分点云与深度图本质的区别 1.深度图像也叫距离影像,是指将从图像采集器到场景中各点的距离(深度)值作为像素值的图像.获取方法有:激光雷达深度成像法.计算机立体视觉成 ...
- PCL点云库中的坐标系(CoordinateSystem)
博客转载自:https://blog.csdn.net/qq_33624918/article/details/80488590 引言 世上本没有坐标系,用的人多了,便定义了坐标系统用来定位.地理坐标 ...
- [转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV
仅供参考,还未运行程序,理解部分有误,请参考英文原版. 绿色部分非文章内容,是个人理解. 转载请注明:http://blog.csdn.net/raby_gyl/article/details/174 ...
- Windows7系统下OpenCV2.4.4+PCL1.6.0+SSBA3.0+VS2010 IDE32环境下编译和安装以实现Sfm和PCL点云数据可视化
最近在学习<深入理解OpenCV:实用计算机视觉项目解析>一书的第三章和第四章时,遇到很多编译问题,书中又没有详细的讲解环境配置和搭建过程.经过多天的捉摸.调试.排错终于将两章的程序都调试 ...
- PCL+Qt+VS可视化点云
前言 Point Cloud Library (PCL)是一个功能强大的开源C++库,假设可以使用好PCL将会对我们在LiDAR数据处理领域的研究产生巨大帮助.LiDAR技术经过几十年的发展.眼下国内 ...
- PCL点云处理可视化——法向显示错误“no override found for vtk actor”解决方法
转:https://blog.csdn.net/bflong/article/details/79137692 参照:https://blog.csdn.net/imsaws/article/deta ...
随机推荐
- 用MATLAB做T检验(ttest)
t-检验: t-检验,又称student‘s t-test,可以用于比较两组数据是否来自同一分布(可以用于比较两组数据的区分度),假设了数据的正态性,并反应两组数据的方差在统计上是否有显著差异. ma ...
- 服务端 https和SSL
String keyStoreFilePassword = System .getProperty("keystore.file.password"); /usr/java/jdk ...
- 【Unity】6.3 通过 C# 脚本创建和访问游戏对象
分类:Unity.C#.VS2015 创建日期:2016-04-16 一.简介 在游戏开发过程中,脚本不但需要访问脚本所在的游戏对象的组件,还经常需要访问和控制真他游戏对象.另外,根据项目需求,还可能 ...
- openssl生成SSL证书的流程
SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数 ...
- EF事务处理封装公用
/// <summary> /// EF事务封装 公用类 /// </summary> public class TransactionCommon { DbContextTr ...
- python-zip方法
zip 返回一个将多个可迭代对象组合成一个元组序列的迭代器. 1. 循环多个list的数据: letters = ['a', 'b', 'c'] nums = [1, 2, 3] for lette ...
- tornado源码分析-多进程
1.源码文件 process.py 2.fork子进程 def fork_processes(num_processes, max_restarts=100): ... def start_child ...
- 【ActiveMQ】Spring Jms集成ActiveMQ学习记录
Spring Jms集成ActiveMQ学习记录. 引入依赖包 无论生产者还是消费者均引入这些包: <properties> <spring.version>3.0.5.REL ...
- error: insufficient permissions for device(解决adb shell问题)
今天在linux下连接平板usb,试用adb shell时出现error: insufficient permissions for device, 而且我们输入adb devices显示: xxna ...
- 关于事件冒泡和键盘事件 以及与Angular的区别
一.事件冒泡 方法一.使用event.cancelBubble = true来组织冒泡 <div @click="show2()"> <input type=&q ...