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

PCL 读取STL文件转换为点云

目录

一、概述

1.1原理

1.2实现步骤

1.3应用场景

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2数据显示


PCL点云算法汇总及实战案例汇总的目录地址链接:

PCL点云算法与项目实战案例汇总(长期更新)


一、概述

1.1原理

        STL(Stereo Lithography)是一种常见的三维模型文件格式,通常用于3D打印和计算机辅助设计(CAD)中。STL文件描述了三维物体的表面网格,其中包含大量三角形面片的顶点信息。通过读取这些顶点信息,可以将STL文件转换为点云数据,供进一步处理和分析。

1.2实现步骤

  1. 使用PCL库中的 pcl::io::loadPolygonFileSTL 函数读取STL文件,并提取其表面网格的顶点信息。
  2. 将提取的顶点信息转换为点云数据。
  3. 将生成的点云数据保存为PCD文件,或进行其他进一步处理。

1.3应用场景

  • 三维模型分析:通过将STL文件转换为点云,可以进行进一步的点云处理,如噪声过滤、特征提取等。
  • 三维重建:将多个STL文件的点云数据合并,可以用于三维重建和模型修复。
  • 计算机视觉与机器人:点云数据在计算机视觉和机器人导航中广泛应用,STL文件转换为点云后可以用于路径规划、物体识别等任务。

二、代码实现

2.1关键函数

1.STL文件读取与转换:

  • pcl::io::loadPolygonFileSTL:用于读取STL文件并提取顶点信息。
  • pcl::PolygonMesh:用于存储STL文件的网格数据。
  • pcl::fromPCLPointCloud2:用于将PCL格式的点云数据从网格顶点中提取出来。

2.点云处理与保存:

  • pcl::PointCloud<pcl::PointXYZ>:用于存储生成的点云数据。
  • pcl::io::savePCDFileASCII:用于将点云数据保存为PCD文件。

2.2完整代码

#include <pcl/io/pcd_io.h>
#include <pcl/io/vtk_lib_io.h>  // 包含加载STL文件的头文件
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <pcl/conversions.h>  // 用于点云格式转换
#include <pcl/visualization/pcl_visualizer.h>  // 包含PCL可视化的头文件int main(int argc, char** argv)
{// 1. 创建PolygonMesh对象,用于存储STL文件的网格数据pcl::PolygonMesh mesh;// 2. 读取STL文件,并将网格数据存储到PolygonMesh对象中if (pcl::io::loadPolygonFileSTL("horse-V2w(binary).stl", mesh) == -1)  // 文件路径{PCL_ERROR("Couldn't read STL file\n");return -1;}// 3. 将网格数据的顶点转换为点云数据pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::fromPCLPointCloud2(mesh.cloud, *cloud);// 4. 保存转换后的点云数据为PCD文件pcl::io::savePCDFileASCII("output.pcd", *cloud);// 5. 输出点云数据的基本信息std::cout << "Loaded " << cloud->points.size() << " data points from STL file." << std::endl;// 6. 创建PCLVisualizer对象,用于显示点云数据pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);  // 设置背景颜色为黑色viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");  // 将点云数据添加到可视化窗口中viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");  // 设置点的大小// 7. 启动可视化主循环while (!viewer->wasStopped()){viewer->spinOnce(100);  // 让可视化窗口刷新}return 0;
}

三、实现效果

3.1原始点云

06b4799a7cf94739b3d1fbc77e56c715.png

3.2数据显示

Loaded 19851 data points from STL file.

 


http://www.mrgr.cn/news/25666.html

相关文章:

  • odoo14 | 报错:Database backup error: Access Denied
  • MySQL 存储过程:强大的数据库功能利器
  • C++缺省参数
  • 数学基础 -- 线性代数之特征值与特征向量深入解析
  • 十,Spring Boot 的内容协商的详细剖析(附+Debug调试说明)
  • 数据库锁有哪些?什么是死锁?
  • brew install node提示:Error: No such keg: /usr/local/Cellar/node
  • Linux 驱动编写框架 并编译导入开发板
  • Leetcode 第 138 场双周赛题解
  • 分类预测|基于改进的灰狼IGWO优化支持向量机SVM的数据分类预测matlab程序 改进策略:Cat混沌与高斯变异
  • 阿里达摩院:FunASR - onnxruntime 部署
  • 单链表的建立
  • Httplib库源码粗度
  • 三折手机可能面临的问题
  • 如何在 Vue 3 中使用 Element Plus
  • 开源免费的工贸一体行业ERP管理系统
  • 【学习笔记】手写 Tomcat 三
  • android 14.0 USB连接模式默认设为MTP
  • MySql:赋权限
  • OLED显示屏应用(STM32)