PCL手记(壹)——PCD文件读取

Author: 琅琊土肥圆
E-mail: [email protected]
Date: 2018-09-21

PCL(Point Cloud Library)全称点云库,用于处理LIDAR设备生成的点云数据。截止至本文档的完成之日(2018-09-21),市场主流的LIDAR设备为Velodyne公司提供的。本文基于的设备是Velodyne的16线设备,属于入门级的低密度LIDAR设备。

闲言少叙,进入正题。本文是PCL手记的首作,自然而然的要讲讲如何打开一个pcd文件——保存点云数据的文件,其具体格式可到这里详细了解。具体代码如下所示。

/* pcd_read.cpp */

#include 
#include 
#include 

int main(int argc, char **argv)
{
  pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
  pcl::PCDReader reader;

  reader.read("filename.pcd", *cloud);

  return 0;
}

逐条解释一下上面的源码。

#include
#include

这两行引入pcl的io内容以及点云类型(point_types),本例中使用的点云点因为不含有色彩信息,所以其类型为pcl::PointXYZ。有的LIDAR生成的点云点带有色彩信息,其类型应该为pcl::PointXYZI(带有灰度信息)和/或pcl::PointXYZRGB(带有色彩信息)。

pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
pcl::PCDReader reader;
reader.read("filename.pcd", *cloud)

第一行定义一个PointCloud数据结构变量,用于暂存(hold)pcd文件中的点云数据,通过其子域points可以对点云中的点进行 访问(access)。
第二行定义一个PCDReader的对象,用于读取pcd文件。
第三行读取pcd文件。

由于PCL库大量使用了模板编程,所以需要读者对于C++的模板编程比较了解,包括模板函数与模板类。

接下来说明,如何编译前述源文件。由于本身PCL比较庞大,有很多模块——类似于OpenCV库,所以编译使用此类库的源文件时,建议使用cmake,而非带有-L以及-I选项的clang++或者g++。具体的编译文件如下所示,CMakeLists.txt。

cmake_minimum_required(VERSION 3.0)

project(pcd_read)

find_package(
  PCL 1.2 REQUIRED
)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})

add_executable(pcd_read ./pcd_read.cpp)
target_link_libraries(pcd_read ${PCL_LIBRARIES})

将该CMakeLists.txt文件和pcd_read.cpp放在同一目录下,在命令行终端运行
$ cmake CMakeLists.txt
即可生成Makefile文件,然后运行
$ make
即可生成可运行文件pcd_read。

你可能感兴趣的:(PCL手记(壹)——PCD文件读取)