PCL入门(二):初识点云数据

1. 点云数据

在pcl里面,定义了很多点云数据类型,比如PointXYZ、PointXYZI、PointXYZRGBA等等,每一个都可以看做是点云的一个点的数据。而整个点云的数据类型被定义为PointCloud。

pcl::PointCloud<pcl::PointXYZ> = cloud为例,cloud为一个点云对象,其中包含很多点云数据,数据类型为pcl::PointXYZ。具体参考博客《【点云处理技术之PCL】PCL中的基本数据类型——PointCloud与PointT》官网点云介绍

2. 对点云数据的简单操作

参考双愚的代码,用rand函数生成几个PointXYZ格式的点云数据,将包含这些数据的点云保存为.pcd格式的点云数据文件。

  • pcl01.cpp
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int main()
{
    
    
		//第一部分:定义点云对象,其中的数据类型为PointXYZ
        pcl::PointCloud<pcl::PointXYZ> cloud;
		
		//第二部分:对点云对象cloud赋值,包括width、height、is_dense等参数赋值,给出点云中数据的定量描述
		//然后对points进行resize,对具体的数据vector初始化其中包含width*height个
        cloud.width = 5;
        cloud.height = 1;
        cloud.is_dense = false;
        cloud.points.resize(cloud.width * cloud.height);

		//第三部分:对cloud的points vector进行赋值
        for (auto &point : cloud)
        {
    
    
                point.x = 1024 * rand() / (RAND_MAX + 1.0f);
                point.y = 1024 * rand() / (RAND_MAX + 1.0f);
                point.z = 1024 * rand() / (RAND_MAX + 1.0f);

        }
		
		//第四部分:对cloud的points vector进行逐个point的输出,并将cloud保存为.pcd格式点云文件
        pcl::io::savePCDFileASCII("test_pcd.pcd", cloud);
        std::cerr << "saved " << cloud.size() << " data points to test_pcd.pcd" << std::endl;

        for (const auto &point : cloud)
        {
    
    
                std::cerr << "  " << point.x << " " << point.y << " " << point.z << std::endl;
        }

        return 0;

}
  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(pcd01)

find_package(PCL)

add_executable(pcl01 pcl01.cpp) # 将cpp文件编译生成可执行文件

target_link_libraries(pcl01 ${PCL_LIBRARIES}) # cpp文件中仅提供了pcl的.h头文件,具体实现需要库文件,这里将库文件链接到可执行文件中

3. 结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_30841655/article/details/132698323