目录
- 1. 点云数据
- 2. 对点云数据的简单操作
- 3. 结果
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头文件,具体实现需要库文件,这里将库文件链接到可执行文件中