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

#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. Go语言学习笔记说明

    参考书籍:<学习Go语言>.<Go语言编程> 程序运行环境:windows(64bit) Go语言版本:go1.0.2   资料: 1.Go语言半小时速成教程 http://w ...

  2. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...

  3. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page13-20

    01 程序集 程序集是包含编译好的.基于.Net Framework的代码逻辑单元.一般来说,在Visual Studio中的一个项目即一个程序集,而一个项目中包含多种不同的代码文件.程序集分为可执行 ...

  4. Django 系列博客(一)

    Django 系列博客(一) 前言 学习了 python 这么久,终于到了Django 框架.这可以说是 python 名气最大的web 框架了,那么从今天开始会开始从 Django框架的安装到使用一 ...

  5. 前端学习(一) —— HTML

    1.js跳转 window.location.href='url'; 2.div显示与隐藏 hide() show() 3.判断是否为一个字符串是否为整形 function isInt(str){ v ...

  6. mysqldump备份(Windows)

    先说下思路,每天凌晨1点备份线上云服务器上的MySQL数据库,将备份的sql文件拷贝下来. 第一步:通过搜索引擎搜索相关可借鉴的文章.搜索关键字"Windows MySQL 备份" ...

  7. [转]docker 部署 mysql + phpmyadmin 3种方法

    本文转自:https://blog.csdn.net/Gekkoou/article/details/80897309 方法1: link # 创建容器 test-mysql (千万别用 mysql: ...

  8. 从零开始学安全(二十五)●用nmap做端口扫描

    以上是常用的端口扫描 -T 用法 每个级别发包时间  当没有使用T 时默认的使用T3级别发包 半开扫描  先探测主机是否存活 再用-sS  扫描端口   容易造成syn 包攻击 就是利用僵尸主机  进 ...

  9. mysql创建和调用out参数的存储过程

    CREATE PROCEDURE sp_add(a int, b int,out c int) begin set c=a+ b; end; 调用过程: call sp_add (,,@a); sel ...

  10. SQL Server导入导出不丢主键和视图的方法

    SQL Server导入导出 SQL Server 导入导出 工具/原料 使用Microsoft SQL Server Management Studio 导入导出数据. 直接使用Microsoft  ...