PCL学习笔记1

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

#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()是貌似用于注销窗口?

 

posted @ 2017-03-28 11:10  蓝域小兵  阅读(917)  评论(0编辑  收藏  举报