PCL库中PLY文件的读取和写入操作详解
创作时间:
作者:
@小白创作中心
PCL库中PLY文件的读取和写入操作详解
引用
CSDN
1.
https://blog.csdn.net/xhm01291212/article/details/141888605
PLY文件格式简介
PLY(Polygon File Format)多边形文件格式,又被称为斯坦福三角形格式,是一种用于存储计算机多边形图形集对象的格式。它既简单易操作,又具有较高的通用性。PLY文件有两种子格式:ASCII和二进制形式。ASCII格式具有简单易操作的特点,而二进制格式则拥有读写紧凑的优势。
在PCL(Point Cloud Library)中,PLY文件可以被读取为点云数据和网格(mesh)数据两种类型。
PLY文件的读取
读取为点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ply(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPLYFile("D:/code/csdn/data/斯坦福/bunny.ply", *cloud_ply); // 读取为点云数据的格式
读取为网格数据
pcl::PolygonMesh::Ptr cloud_mesh(new pcl::PolygonMesh);
pcl::io::loadPLYFile("D:/code/csdn/data/斯坦福/bunny.ply", *cloud_mesh); // 读取为mesh数据的格式
PLY文件的保存
点云数据类型的保存
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ply(new pcl::PointCloud<pcl::PointXYZ>);
// 点云数据类型的保存
pcl::io::savePLYFile("D:/code/csdn/data/bunny_ascii.ply", *cloud_ply); // 写入ply点云文件,默认为ASCII格式
pcl::io::savePLYFileBinary("D:/code/csdn/data/bunny_bin.ply", *cloud_ply); // 写入ply点云文件,bin的二进制格式
网格数据类型的保存
pcl::PolygonMesh::Ptr cloud_mesh(new pcl::PolygonMesh);
// 模型数据类型的保存
pcl::io::savePLYFile("D:/code/csdn/data/bunny_mesh.ply", *cloud_mesh); // 写入ply模型文件,默认为ASCII格式
pcl::io::savePLYFileBinary("D:/code/csdn/data/bunny_bin.ply", *cloud_mesh); // 写入ply点云文件,bin的二进制格式
完整代码示例
#include <iostream>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
#define PLY_LOAD_FUNC
int main()
{
/****************读取PLY文件********************/
pcl::PLYReader* plyReader = new pcl::PLYReader(); // ply对象
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ply(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PolygonMesh::Ptr cloud_mesh(new pcl::PolygonMesh);
#ifdef PLY_LOAD_FUNC
/****************方式一********************/
pcl::io::loadPLYFile("D:/code/csdn/data/斯坦福/bunny.ply", *cloud_ply); // 读取为点云数据的格式
pcl::io::loadPLYFile("D:/code/csdn/data/斯坦福/bunny.ply", *cloud_mesh); // 读取为mesh数据的格式
#else
/****************方式二********************/
// 读取文件头
pcl::PCLPointCloud2 cloud2_ply_header; // 结果点云数据头信息
Eigen::Vector4f origin_header; // 传感器采集原点(仅适用于>FILE_V7,如果不存在则为空)
Eigen::Quaternionf orientation_header; // 传感器采集方向(仅适用于>FILE-V7)
int file_version_header; // 文件的file版本(file_V6或file_V7)
int data_type_header; // 数据类型(二进制数据=1,ply=0等)
unsigned int data_idx_header; // 文件中点云数据的偏移量
plyReader->readHeader("D:/code/csdn/data/bunny.ply", cloud2_ply_header, origin_header, orientation_header, file_version_header, data_type_header, data_idx_header);
// 读取文件
pcl::PCLPointCloud2 cloud2_ply; // 结果点云数据
Eigen::Vector4f origin; // 传感器采集原点(仅适用于>FILE_V7,如果不存在则为空)
Eigen::Quaternionf orientation; // 传感器采集方向(仅适用于>FILE-V7)
int file_version; // 文件的file版本(file_V6或file_V7)
plyReader->read("D:/code/csdn/data/bunny.ply", cloud2_ply, origin, orientation, file_version);
pcl::fromPCLPointCloud2<pcl::PointXYZ>(cloud2_ply, *cloud_ply); // 转换为pcl::point<pointT>形式
#endif // PLY_LOAD_FUNC
/****************写入ply文件********************/
// 点云数据类型的保存
pcl::io::savePLYFile("D:/code/csdn/data/bunny_ascii.ply", *cloud_ply); // 写入ply点云文件,默认为ASCII格式
pcl::io::savePLYFileBinary("D:/code/csdn/data/bunny_bin.ply", *cloud_ply); // 写入ply点云文件,bin的二进制格式
// 模型数据类型的保存
pcl::io::savePLYFile("D:/code/csdn/data/bunny_mesh.ply", *cloud_mesh); // 写入ply模型文件,默认为ASCII格式
pcl::io::savePLYFileBinary("D:/code/csdn/data/bunny_bin.ply", *cloud_mesh); // 写入ply点云文件,bin的二进制格式
// 展示
boost::shared_ptr<pcl::visualization::PCLVisualizer> view_raw(new pcl::visualization::PCLVisualizer("raw"));
view_raw->addPointCloud(cloud_ply, "raw cloud");
view_raw->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "raw cloud");
boost::shared_ptr<pcl::visualization::PCLVisualizer> view_1(new pcl::visualization::PCLVisualizer("mesh"));
view_1->addPolygonMesh(*cloud_mesh, "mesh cloud");
view_1->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "mesh cloud");
while (!view_raw->wasStopped() || !view_1->wasStopped())
{
view_raw->spinOnce(100);
view_1->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
}
结果展示
读取为点云形式
读取为模型形式
写入之后的文件
对写入之后的文件,可以直接使用Windows预览功能查看:
本文原文来自CSDN
热门推荐
红楼梦:贾赦世袭一等将军,贾代化为什么也是一等将军?
美国劳斯ROUTH进口深井泵工作特性及使用原理
脚踝疼痛与艾滋病:科学解析两者关系
张诚金道医:源自远古的医学智慧,现代社会的健康灯塔
中国猫猫被恶意搬运外网,结果它太能打,红了!外国网友:原来是功夫喵啊?
从养鱼小白到高手:新手必知的三种入门鱼种
如何凝聚团队留任率
广东2024经济答卷:GDP增长3.5%,多项核心指标边际改善
羽毛球运动:轻羽飞扬中的绿色材料革命
PCIe5.0固态硬盘优势与选购指南
如何判断您的热水器是否需要更换?
“光刻机之王”荷兰ASML,靠一台机器独步全球,无人能敌
国字脸还是"猪腰子脸"?AI复原揭秘朱元璋真实长相
哪种染发剂更伤头发?—— 染发剂避雷
英国《金融时报》丨泽连斯基最艰难的战斗开始了
空调最多补3台,补贴扩容至12类,2025家电国补继续“赏饭吃”
新高考物理组和历史组一起赋分吗?物理和历史要赋分吗?
银河画卷新发现:银河系外缘旋臂观测范围扩大1.5倍,揭示恒星形成奥秘
试用期需要交社保吗?试用期的劳动法律问题一文读懂
什么水果榨汁后会减肥和通便
专家建议:家庭高温油炸应选择一级油
购车合同什么时候签?这些关键点要注意!
高温烹饪用油指南:四大原则帮你选对健康好油
永璂:清朝最惨皇子,被称“穿孝阿哥”,生前无爵位,死后受屈辱
什么是"有毒关系"?六大征兆与预防方法
会理石榴品牌营销:让会理石榴走向全国
紫泥有几种颜色
2025年1月全国高铁网车次密度示意图
ConsiStory:无需训练的一致性文本到图像生成技术
打印机换了墨盒还是显示缺墨怎么办?分享4种解决方案