先贴一段代码,从别处抄来的

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include<pcl/visualization/cloud_viewer.h>
int
main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *cloud) == -1)
{
PCL_ERROR("Couldn't read file test_pcd.pcd \n");
return (-1);
}
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from test_pcd.pcd with the following fields: "
<< std::endl;
#if 0
for (size_t i = 0; i < cloud->points.size(); ++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
#endif pcl::visualization::CloudViewer viewer("test");
viewer.showCloud(cloud);
while (!viewer.wasStopped()){}
return (0);
}

这段代码是读取了一个pcd文件

pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1],*cloud);

将其存储到cloud之中,再通过

pcl::visualization::CloudViewer viewer

showCloud(cloud)

函数,将其显示到屏幕之中。

我这里读取的是pcl的一个logo

看懂这段代码需要一定基础的C++知识

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

pcl是一个命名空间,PointCloud是一个模板类,Ptr是一个boost库中的共享指针类型(shared_ptr,是一种智能指针).

所以这段代码就是定义了一个智能指针cloud,这个指针指向PointCloud类型,这个PointCloud类型以pcl::PointXYZ为参数。

PointXYZ是一种结构体,这中结构体类型应该是包含了点的三维坐标数据(但是我没找到这个结构体定义中的三维坐标数据变量在哪里。。)

cloud(new pcl::PointCloud<pcl::PointXYZ>)是智能指针的初始化(还不是很熟悉,不知道对不对,姑且这么叫吧),反正就是让cloud指向了一个新申请的PointCloud类型的对象。

pcl::io::loadPCDFile(),明显,这是读取pcd文件的函数,将pcd文件中的数据读取到cloud所指的对象中。

后面的std::cout这个不用说了,标准输出,即输出到屏幕,

cloud->width*cloud->height,这里是输出点云的个数,这里有点小知识:

  点云数据集分为有序点云数据集和无序点云数据集,有序的点云数据集可以想成矩阵形式的分行分列,width就是这个数据集的宽度,height就是这个数据集的高度,是二维形式的,width*height就是点的个数。而无序点云数据集就是一维形式的,width就是点的个数,和pcd文件格式中的POINTS一样,height就为1,这样width*height也是点的个数。

所以这段代码不用说了,反正就是输出点的个数就行了。

后面有个预编译指令#if....#endif,貌似没有什么卵用。。。反正都不会执行,我不知道为什么,原代码作者是这么写的代码。。。

后面的代码就很明显了

pcl::visualization::CloudViewer view("test");

创建了一个用于显示点云的CloudViewer类型的对象,其实就是上图中的黑窗口,用来3维显示点云数据的,

viewer.showCloud(cloud);  // 这里就是显示的代码

后面有个循环,现在还不太清楚这个循环的意义,wasStopped()是貌似用于注销窗口?

PCL学习笔记1的更多相关文章

  1. PCL学习笔记(一)

    由于项目需要,开始学习一下HP公司的PCL打印语言,发现这方面的中文资料非常少,我做下记录也为后人提供便利. 关于PCL的介绍可以参考wiki百科 http://zh.wikipedia.org/zh ...

  2. pcl学习笔记(二):点云类型

    不同的点云类型 前面所说的,pcl::PointCloud包含一个域,它作为点的容器,这个域是PointT类型的,这个域是PointT类型的是pcl::PointCloud类的模板参数,定义了点云的存 ...

  3. PCL学习笔记二:Registration (ICP算法)

    原文:http://blog.csdn.net/u010696366/article/details/8941938 PCL Registration API Registration:不断调整,把不 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  5. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  6. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  7. Xamarin 学习笔记 - Page(页面)

    本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1226447/Xamarin-Notes-Xamarin-Forms-Pages 转载 ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. Android studio 下 JNI 开发实例

    在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为“交叉编译”? 先看什么是 JNI?JNI 的全称就是 Java Native In ...

  2. Python丢弃返回值

    函数多个返回值 python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全等价的. def f(): return 1,2 def f(): retu ...

  3. Logback中如何自定义灵活的日志过滤规则

    当我们需要对日志的打印要做一些范围的控制的时候,通常都是通过为各个Appender设置不同的Filter配置来实现.在Logback中自带了两个过滤器实现:ch.qos.logback.classic ...

  4. 第一册:lesson ninety one.

    原文:  Poor lan. Has lan sold his house yet? Yes,he has. He sold it last week. Has he moved to his new ...

  5. VS2013 OpenGL 开发程序时: error LNK2019: 无法解析的外部符号 __imp____glutInitWithExit@12,error LNK2019: 无法解析的外部符号 __imp____glutCreateWindowWithExit@8

    环境:Windows 下 OpenGL ,Used in VS2013 前言:刚接触 OpenGL 的人,第一件事当然就是配置环境,说起配置环境 OpenGL 和 DirectX 相差不多,同时也基本 ...

  6. 在Java中进行序列化和反序列化

    对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象. 对象序列化允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输 ...

  7. EF实现增删改查

    从来没想到过能在这个上面翻车,感慨自学没有培训来得系统啊,废话不多说 ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一 ...

  8. Lucene的简单用法

    1.创建索引 package com.DingYu.Test; import java.io.File; import java.io.FileInputStream; import java.io. ...

  9. JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏

    摘要: 作者将自己常用的JavaScript模块分享给大家. 原文:JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏 作者:前端小智 Fundebug经授权转载,版权归原作者所有. ...

  10. hihoCoder编程练习赛72

    题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有 ...