当前位置: 首页 > news >正文

PCL库开发入门

Point Cloud Library (PCL) 是一个开源的点云处理库,广泛应用于3D点云数据的获取、处理、滤波、特征提取、分割、识别、可视化等领域。以下是PCL库开发的入门指南。

1. PCL库简介

PCL(Point Cloud Library)是一个大型跨平台开源C++库,用于:

  • 2D/3D图像和点云处理

  • 特征提取

  • 曲面重建

  • 3D可视化

  • 点云配准

  • 目标识别

2. 安装PCL

Ubuntu/Linux安装

bash

sudo apt-get install libpcl-dev pcl-tools

Windows安装

可以从PCL官网下载预编译的二进制文件或使用vcpkg:

bash

vcpkg install pcl

macOS安装

使用Homebrew:

bash

brew install pcl

3. 基本概念

  • 点云(Point Cloud):一组无序的点,包含3D坐标(XYZ),可能还包含RGB颜色、强度值、法线等附加信息

  • PCL数据类型pcl::PointCloud<pcl::PointT>

  • 常用点类型

    • pcl::PointXYZ - 只有XYZ坐标

    • pcl::PointXYZRGB - XYZ坐标+RGB颜色

    • pcl::PointNormal - XYZ坐标+法线信息

4. 第一个PCL程序

以下是一个简单的PCL程序,创建一个点云并保存到文件:

cpp

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>int main() {// 创建一个点云对象pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 填充点云数据cloud->width = 100;cloud->height = 1;cloud->points.resize(cloud->width * cloud->height);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);}// 保存到文件pcl::io::savePCDFileASCII("test_pcd.pcd", *cloud);// 可视化pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");viewer.showCloud(cloud);while (!viewer.wasStopped()) {}return 0;
}

5. CMakeLists.txt配置

使用PCL需要正确配置CMake:

cmake

cmake_minimum_required(VERSION 3.5)
project(pcl_example)find_package(PCL 1.2 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})add_executable(pcl_example pcl_example.cpp)
target_link_libraries(pcl_example ${PCL_LIBRARIES})
 

6. PCL主要模块

6.1 I/O模块

#include <pcl/io/pcd_io.h>
// 读取点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("file.pcd", *cloud);// 保存点云
pcl::io::savePCDFileBinary("output.pcd", *cloud);

6.2 滤波处理

#include <pcl/filters/voxel_grid.h>
// 体素滤波
pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(0.01f, 0.01f, 0.01f);
sor.filter(*cloud_filtered);

6.3 特征提取

#include <pcl/features/normal_3d.h>
// 计算法线
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud);
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());
ne.setSearchMethod(tree);
pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
ne.setRadiusSearch(0.03);
ne.compute(*cloud_normals);
 

6.4 点云配准

#include <pcl/registration/icp.h>
// ICP配准
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
icp.setInputSource(source_cloud);
icp.setInputTarget(target_cloud);
pcl::PointCloud<pcl::PointXYZ> Final;
icp.align(Final);

6.5 可视化

#include <pcl/visualization/pcl_visualizer.h>
// 可视化
pcl::visualization::PCLVisualizer viewer("PCL Viewer");
viewer.addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
while (!viewer.wasStopped()) {viewer.spinOnce();
}

7. 学习资源

  1. 官方文档:Point Cloud Library | The Point Cloud Library (PCL) is a standalone, large scale, open project for 2D/3D image and point cloud processing.

  2. GitHub仓库:https://github.com/PointCloudLibrary/pcl

相关文章:

  • 【C++】win 10 / win 11:Dev-C++ 下载与安装
  • 域名解析,配置Linux系统的固定IP地址
  • 大模型应用开发自学笔记
  • 右起第2个LED灯的闪烁(STC89C52单片机)
  • 车载测试用例开发-如何平衡用例覆盖度和测试效率的方法论
  • SpringBoot Actuator健康检查:自定义HealthIndicator
  • MySQL完整版进阶及附录
  • Linux 420 find stat touch tree scp crontab
  • 【去哪儿网】登录滑块逆向算法AES加密分析(逆天滑块轨迹)
  • C++学习:六个月从基础到就业——内存管理:RAII原则
  • 【重走C++学习之路】14、多态
  • Oracle高级语法篇 - 用户与角色关系
  • 【中级软件设计师】语言处理程序(汇编程序、解释程序、编译程序)附软考真题
  • Java表达式2.0
  • 【中间件】redis使用
  • 【第三十二周】CLIP 论文阅读笔记
  • 计算机视觉与深度学习 | RNN原理,公式,代码,应用
  • 在 Debian 12 中恢复被删除的 smb.conf 配置文件
  • ESP32开发之任务创建
  • [RHEL8] 指定rpm软件包的更高版本模块流
  • 著名茶叶专家谢丰镐逝世,享年95岁
  • 美联储褐皮书:关税政策背景下,美国部分地区物价上涨、经济前景恶化
  • 厚植民营企业家成长土壤是民营经济高质量发展的关键
  • 第四届全民阅读大会·阅读权益保障论坛举办
  • “听公交时听一听”,上海宝山街头遍布“有声图书馆”
  • 金地集团:保交楼为经营的首要任务,将根据融资性现金流恢复程度等进行投资决策