PCL读取pcd点云文件

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。  

        随着三维数据在计算机视觉和机器人领域的广泛应用,点云数据成为了一个重要的数据形式。PCD(Point Cloud Data)是一种常见的点云数据格式,而PCL(Point Cloud Library)则是一个用于处理点云数据的强大库。在本篇博文中,我们将介绍如何使用PCL库来读取各种格式的PCD点云文件。

1 PCL简介

        PCL是一个开源的库,提供了大量用于点云处理的工具和算法,包括滤波、分割、特征提取等。它支持多种点云输入输出格式,并且提供了丰富的文档和示例,使得处理点云数据变得更加简单和高效。

2 读取PCD点云文件

        首先,我们需要安装PCL库并设置好环境。接下来,我们将以C++代码为例,演示如何使用PCL库来读取各种格式的PCD点云文件。示例点云rabbit.pcd下载地址为https://download.csdn.net/download/suiyingy/85129456。

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

int main (int argc, char** argv)
{
  // 读取.pcd文件
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("../../rabbit.pcd", *cloud) == -1) //* 读入PCD文件
  {
    PCL_ERROR ("Couldn't read file example_cloud.pcd \n");
    return (-1);
  }
  std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from rabbit.pcd with the following fields: "
            << std::endl;
  for (size_t i = 0; i < 10; ++i)
    std::cout << "    " << cloud->points[i].x
              << " "    << cloud->points[i].y
              << " "    << cloud->points[i].z << std::endl;

  return (0);
}

        上述程序演示了如何使用PCL库来读取一个名为rabbit.pcd的点云文件。通过pcl::io::loadPCDFile函数,我们可以方便地将点云数据读入内存,并对数据进行进一步处理和分析。读取结果如下:

3 读取RGBXYZ格式

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

int main (int argc, char** argv)
{
  // 读取.pcd文件
  pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>);
  if (pcl::io::loadPCDFile<pcl::PointXYZRGB> ("../../rabbit.pcd", *cloud) == -1) //* 读入PCD文件
  {
    PCL_ERROR ("Couldn't read file example_cloud.pcd \n");
    return (-1);
  }
  std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from rabbit.pcd with the following fields: "
            << std::endl;
  for (size_t i = 0; i < 10; ++i)
    std::cout << "    " << cloud->points[i].x
              << " "    << cloud->points[i].y
              << " "    << cloud->points[i].z << std::endl;

  return (0);
}

4 CMakeLists.txt

cmake_minimum_required(VERSION 3.21)

project(01_readpcd)


set(CMAKE_BUILD_TYPE "Debug") 

# 设置PCL库的路径(假设PCL已经安装在系统中)
find_package(PCL 1.9 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

# 添加你的源文件
add_executable(${PROJECT_NAME} main.cpp)

# 将PCL的DLL文件拷贝到输出目录
# file(GLOB PCL_DLLS "${PCL_ROOT}/bin/*.dll")
# file(COPY ${PCL_DLLS} DESTINATION "${CMAKE_BINARY_DIR}/Debug")

message("PCL_DLL: " ${PCL_LIBRARY_DIRS})
message("PCL_DLL: " ${PCL_ROOT})
message("PCL_LIB: " ${PCL_LIBRARIES})
foreach(library ${PCL_LIBRARIES})
  message("PCL_LIB: ${library}")
endforeach()

# 链接PCL库
target_link_libraries(${PROJECT_NAME} ${PCL_LIBRARIES})

5 总结        

        除了读取.pcd格式的点云文件外,PCL库还支持多种其他格式,包括PLY、OBJ、VTK等。通过PCL库提供的相应函数,我们可以轻松地读取这些不同格式的点云数据,从而满足实际应用中的各种需求。

        在本文中,我们介绍了如何使用PCL库来读取各种格式的PCD点云文件。通过PCL库提供的丰富功能和简洁接口,我们可以高效地处理点云数据,为三维视觉和机器人领域的研究和应用提供强大的支持。希望本文能够对初学者有所帮助,也欢迎大家进一步探索PCL库的其他功能和应用场景。

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。  

更多python与C++技巧、三维算法、深度学习算法总结、大模型请关注我的博客,欢迎讨论与交流:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。Python三维领域专业书籍推荐:《人工智能点云处理及深度学习算法》。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
dll函数接口: ////******** 初始化默认参数 ********// //extern "C" int __stdcall ZSY3DViewerInit(); //******** 读取历史数据到cloud ********// extern "C" int __stdcall ZSY3DReadHistoryData(char *file_dir); //******** 读取txt数据到cloud ********// extern "C" int __stdcall ZSY3DReadTxtData(char *file_dir); //******** 读取单个点数据到cloud ********// extern "C" int __stdcall ZSY3DReadSingleData(float x, float y, float z); //******** 读取所有点数据到cloud ********// extern "C" int __stdcall ZSY3DReadNowData(float *x, float *y, float *z, int count); //******** vtk读取txt文件并显示 ********// extern "C" int __stdcall ZSY3DReadFile_TXT(char *file_dir); //******** vtk读取obj文件并显示 ********// extern "C" int __stdcall ZSY3DReadFile_OBJ(char *file_dir); //******** vtk读取vtk文件并显示 ********// extern "C" int __stdcall ZSY3DReadFile_VTK(char *file_dir); //******** vtk读取ply文件并显示 ********// extern "C" int __stdcall ZSY3DReadFile_PLY(char *file_dir); //******** cloud下采样处理 ********// extern "C" int __stdcall ZSY3DDownSampling(float leaf_size); //******** cloud均匀采样处理 ********// extern "C" int __stdcall ZSY3DBalanceSampling(float radiusSearch = 0.01f); //******** cloud增采样处理 ********// extern "C" int __stdcall ZSY3DIncreaseSampling(float radius = 0.03f, float StepSize = 0.02f); //******** cloud直通滤波采样处理 ********// extern "C" int __stdcall ZSY3DStraightSampling(char *fieldName = "z", float limits_min = 0.0f, float limits_max = 0.1f, bool limitsNegative = true); //******** cloud统计滤波采样处理 ********// extern "C" int __stdcall ZSY3DStatisticsSampling(float meanK = 50.0f,float stddevMulThresh = 1.0f); //******** cloud半径滤波采样处理 ********// extern "C" int __stdcall ZSY3DRadiusSampling(float radiusSearch = 0.8f, float minNeighborsInRadius = 2.0f); //******** cloud数据进行渲染,并显示 ********// extern "C" int __stdcall ZSY3DShowPointCloud(); //******** cloud数据进行VTK三维重建(三角面绘制),并显示 ********// extern "C" int __stdcall ZSY3DDelaunayBuild(bool depth_color); //******** cloud数据进行VTK三维重建(曲面体绘制),并显示 ********// extern "C" int __stdcall ZSY3DSurfaceBu

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值