PCL(Point Cloud Library)是一个开源的库,用于处理点云数据的获取、处理、滤波、特征提取、配准、分割等一系列操作。它提供了丰富的算法和工具,可用于处理三维点云数据,是许多计算机视觉和机器人领域常用的工具之一。
1 PCL主要特点
以下是 PCL 库的一些主要特点和功能:
点云数据结构支持:PCL 提供了各种类型的点云数据结构,包括 XYZ 点、RGB 点、法向量等,方便用户存储和处理不同类型的点云数据。
点云处理算法:PCL 包含了各种点云处理算法,如滤波、特征提取、配准、分割等,可以帮助用户对点云数据进行各种操作和分析。
多种输入输出格式支持:PCL 支持多种常见的点云数据格式,包括 PCD、PLY、PCAP 等,方便用户导入和导出点云数据。
与其他库的集成:PCL 可以与其他常用的库(如 OpenCV、Boost 等)结合使用,扩展了其在计算机视觉和机器人领域的应用范围。
跨平台性:PCL 支持 Windows、Linux 和 macOS 等多个平台,使其更易于在不同环境下使用和部署。
总的来说,PCL 是一个功能强大且广泛应用于三维点云数据处理领域的开源库,为研究人员和开发者提供了丰富的工具和算法来处理和分析点云数据。
2 指定版本编译安装
2.1 依赖环境
sudo apt-get update
sudo apt-get install -y libboost-all-dev libeigen3-dev libflann-dev libvtk7-dev libqhull-dev
2.2 pcl-1.8.1下载
PCL库源码工程地址为GitHub - PointCloudLibrary/pcl: Point Cloud Library (PCL)(https://github.com/PointCloudLibrary/pcl),历史版本地址为Releases · PointCloudLibrary/pcl · GitHub(https://github.com/PointCloudLibrary/pcl/releases/)。
下面pcl-1.8.1版本安装为例,源码下载地址为Release pcl-1.8.1 · PointCloudLibrary/pcl · GitHub(https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.8.1)。滚动到页面底部下载Source code,zip和tar.gz格式均可,这里下载zip格式。
wget方式下载命令为:
wget https://github.com/PointCloudLibrary/pcl/archive/refs/tags/pcl-1.8.1.zip
2.3 编译安装
unzip pcl-1.8.1.zip
cd pcl-pcl-1.8.1/
mkdir build && cd build
cmake .. (或者)cmake -DCMAKE_BUILD_TYPE=Release ..
make -j2
sudo make install
如果后续测试发现点云裁剪函数CropBox返回值不正确或者为空,这个问题不一定会出现,可能跟版本和系统环境有关,那么需要重新编译,需要在cmake中增加如下参数。
rm -r build
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DPCL_ENABLE_SSE:BOOL=FALSE ..
make -j2
sudo make install
3 CMakeLists.txt
3.1 示例内容
CMakeLists.txt的示例内容如下所示。
cmake_minimum_required(VERSION 3.20)
project(hello_world)
find_package(Boost REQUIRED COMPONENTS system)
# find_package(PCL 1.8 REQUIRED)
set(PCL_DIR "/usr/local/include/pcl-1.8")
set(PCL_LIBRARIES "/usr/local/lib")
message("PCL_DIR: " ${PCL_DIR})
message("PCL_LIBRARIES: " ${PCL_LIBRARIES})
include_directories(
${Boost_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/include
/usr/local/include
/usr/include/
/usr/include/eigen3
/usr/local/include/pcl-1.8
)
set(CMAKE_BUILD_TYPE "Debug") # 默认是Release模式,设置为Debug才能调试
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 设置可执行文件的输出目录
add_executable(hello_world test_pcl.cpp)
file(GLOB PCL_LIB_FILES ${PCL_LIBRARIES}/libpcl*)
target_link_libraries(${PROJECT_NAME} PRIVATE ${PCL_LIB_FILES})
3.2 注意事项
(1)使用find_package(PCL 1.8 REQUIRED)可能会找到其它依赖,比如anaconda中的依赖,可以用示例内容中的message来查看查询结果。当这种情况出现时,可以按照上述示例内容通过SET来指定路径。
(2)需要将boost包含进来,即find_package(Boost REQUIRED COMPONENTS system)、
include_directories(${Boost_INCLUDE_DIRS})。否则会报如下错误"undefined reference to `boost::system::generic_category()",即找不到boost相关内容。
4 示例程序
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int main()
{
// 创建一个PointCloud对象
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
// 从文件中读取点云数据
if (pcl::io::loadPCDFile<pcl::PointXYZ>("xxx.pcd", *cloud) == -1)
{
PCL_ERROR("Couldn't read file.\n");
return -1;
}
// 输出前10个点的信息
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from your_point_cloud.pcd with the following fields: "
<< std::endl;
int count = 0;
for (const auto& point : *cloud)
{
if (count < 10)
{
std::cout << "x: " << point.x
<< ", y: " << point.y
<< ", z: " << point.z
<< std::endl;
count++;
}
else
{
break; // 输出了前10个点后退出循环
}
}
return 0;
}
【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。
更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。