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

基于Win系统下PCL库入门到实践:IO模块之PLY文件的读写(附详细代码

        PLY(Polygon File Format) 是一种常用的三维数据存储格式,最初由 Stanford 大学提出。可以保存的信息有点云数据(XYZ,RGB,法向量,强度等属性)、网格模型(点 + 面的拓扑关系)。实际应用场景广泛:三维扫描与建模:结构光扫描仪/深度相机输出点云 → 保存为 PLY → 用于 3D 打印或仿真。点云到网格的过渡:PCL/Open3D 重建曲面 → 导出 PLY → 在 Meshlab/Blender 中查看和编辑。自动驾驶与机器人:激光雷达点云 → 转成 PLY → 用第三方工具做可视化和标注。医学影像:CT/MRI 数据重建 3D 模型 → 保存为 PLY → 用于手术导航和医学可视化。

文件的读取

PLY的读取和PCD的类似也是分为两种:

pcl::PLYReader reader;
reader.read("C:\\Users\\admin\\Desktop\\code\\pcl_type.pcd", Cloud);
pcl::io::loadPLYFile("C:\\Users\\admin\\Desktop\\code\\result\\pcl_ASCII.pcd", Cloud);

文件的保存

pcl::PLYWriter writer;
writer.write("C:\\Users\\admin\\Desktop\\code\\pcl_ASCII.pcd",*Cloud2,true);
writer.writeASCII("C:\\Users\\admin\\Desktop\\code\\pcl_ASCII.pcd",Cloud);
writer.writeBinary("C:\\Users\\admin\\Desktop\\code\\pcl_Binary.pcd",Cloud);
pcl::io::savePLYFile("C:\\Users\\admin\\Desktop\\code\\pcl.pcd",*Cloud2);
pcl::io::savePLYFileASCII("C:\\Users\\admin\\Desktop\\code\\pcl.pcd",*Cloud2);
pcl::io::savePLYFileBinary("C:\\Users\\admin\\Desktop\\code\\pcl_Binary.pcd",*Cloud2);

PLY文件的保存可能有区别:不能保存为压缩二进制,原始write中的第四个参数就是是否保存二进制。并且本身write支持接受两种类别的点云变量。

而第一种的方法ASCII和Binary只支持PCLPointCloud2的接收。

至于第二种方法就支持了,可以跳转到其函数定义:

mesh

这里引入mesh的介绍

Mesh(网格)是 3D 表面几何的一种离散表示方法。点云(Point Cloud):只有点,没有拓扑关系。Mesh(网格):不仅有点(顶点),还有面(多边形),可以表示物体的形状和表面。一个 Mesh = 顶点表 + 面索引表。Mesh 通常保存在以下文件中:PLY(Polygon File Format)、OBJ、STL、OFF。

具体代码实现添加mesh:

#include <thread>
#include <pcl/point_cloud.h>
#include <pcl/io/ply_io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>//.h>using namespace std;int main()
{pcl::PolygonMesh mesh;pcl::PCLPointCloud2 Cloud;//这里是不知道要读取得点云到底是什么格式得,所以使用PCLPointCloud2可以读取更多得格式pcl::io::loadPLYFile("C:\\Users\\admin\\Desktop\\code\\3Dfile\\PLY Railgun\\Railgun_Prototype-Polygon File Format.ply", Cloud);pcl::io::loadPLYFile("C:\\Users\\admin\\Desktop\\code\\3Dfile\\PLY Railgun\\Railgun_Prototype-Polygon File Format.ply", mesh);for(auto &f : Cloud.fields)cout <<f.name<<endl;//这一步就是在输出口打印其格式pcl::PointCloud<pcl::PointXYZ>::Ptr Cloud2(new  pcl::PointCloud<pcl::PointXYZ>);pcl::fromPCLPointCloud2(Cloud,*Cloud2);// // 创建 CloudViewerpcl::visualization::CloudViewer viewer("Viewer");viewer.showCloud(Cloud2);viewer.runOnVisualizationThread([&](pcl::visualization::PCLVisualizer &vis){vis.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud");vis.setBackgroundColor(0.2,0.3,0.4);if (!vis.contains("mesh")) {vis.addPolygonMesh(mesh,"mesh");}//添加mesh});// 保持显示while (!viewer.wasStopped())std::this_thread::sleep_for(std::chrono::milliseconds(100));// pcl::PLYWriter writer;// writer.write("C:\\Users\\admin\\Desktop\\code\\pcl_ASCII.pcd",*Cloud2,true);// writer.writeASCII("C:\\Users\\admin\\Desktop\\code\\pcl_ASCII.pcd",Cloud);// writer.writeBinary("C:\\Users\\admin\\Desktop\\code\\pcl_Binary.pcd",Cloud);// pcl::io::savePLYFileBinary("C:\\Users\\admin\\Desktop\\code\\pcl_Binary.pcd",*Cloud2);// pcl::io::savePLYFile("C:\\Users\\admin\\Desktop\\code\\pcl.pcd",*Cloud2);// pcl::io::savePLYFileASCII("C:\\Users\\admin\\Desktop\\code\\pcl.pcd",*Cloud2);return 0;
}

添加mesh和点云可视化结果:

http://www.dtcms.com/a/407141.html

相关文章:

  • 网站在线生成器外贸网站假设
  • C++项目:仿muduo库高并发服务器-------Channel模块实现
  • Python常用内建模块——hashlib
  • 《C++程序设计》笔记p7
  • 住房城乡建设网站查询wordpress 标签选项卡
  • 服务器机械硬盘能支撑高并发流媒体吗?
  • 奇妙数字(GESP五级202412T1)C++题解
  • 网站建设需要多少技术有备案号的网站是公司的吗
  • vscode壁纸插件(无主题修改)
  • OpenLayers地图交互 -- 章节十一:拖拽文件交互详解
  • 做网站优化的协议书免费网页制作的网站
  • 吃的网站要怎么做的企业管理咨询与诊断实践报告
  • Mac系统,Docker的MySQL + 本地 Canal
  • 零基础学Docker(3)--图形化管理工具Portainer
  • 远控中,游戏与应用中心功能如何开启?适用于哪些场景?
  • 零基础学Docker(4)--Docker镜像原理
  • 商丘网站制作报价信赖赛憬科技手机设计软件哪个好
  • R语言 生物分析中 富集分析的可视化,特别是气泡图和条形图的作用和解读
  • 上海市虹口市容建设公司网站文件外链生成网站
  • 利用h5做网站的心得学校网站建设意义有哪些方面
  • 美食网站建设多少钱wordpress又拍云cdn伪静态
  • 吴恩达d1
  • 第26讲 无监督机器学习
  • 【机器学习】我如何解释线性回归(欢迎指正讨论)
  • 申请的网站怎么建设广告公司加盟代理哪家好
  • STM32F4+RT-Thread IWDG 看门狗 开发实战:从驱动编写到“喂狗、超时复位”指南
  • 视频网站后台模板电影网站html代码
  • 从“黄金公式“到AI内容矩阵:快消品牌如何实现转化率8倍增长
  • Magick.NET库测试
  • 八、OpenCV中的常见滤波方式