C#下将点云数据保存为PLY格式

目前没有找到C#下将点云数据保存为PLY格式的库,查看了一下PLY格式,所以自己写了个方法实现点云数据保存PLY格式 

       public static string SavePointCloudToPLY(string No, float[] x, float[] y, float[] z)
       { 
           string result = "";
           Task.Run(() =>
           {
               try
               {

                   //生成3d模型
                   string Dir1 = DateTime.Now.ToString("yyyy-MM-dd");
                   string Dir2 = DateTime.Now.ToString("yyyy-MM-dd HH");
                   string PreName = DateTime.Now.ToString("yyyy-MM-dd HHmmss");
                   string ImageDir = $@"{AppDomain.CurrentDomain.BaseDirectory}Logs\Camera3DFile\{Dir1}\{Dir2}\";

                   if (!Directory.Exists(ImageDir))
                   {
                       Directory.CreateDirectory(ImageDir);
                   }
                   string imageFile = $@"{ImageDir}{No}_{YitIdHelper.NextId()}.ply";

                   StringBuilder stringBuilder = new StringBuilder();
                   stringBuilder.Append("ply\n");
                   stringBuilder.Append("format ascii 1.0\n");
                   stringBuilder.Append($"element vertex {x.Length}\n");
                   stringBuilder.Append("property float x\n");
                   stringBuilder.Append("property float y\n");
                   stringBuilder.Append("property float z\n");
                   stringBuilder.Append("end_header\n");

                   for (int i = 0; i < x.Length; i++)
                   {
                       stringBuilder.Append($"{x[i]} {y[i]} {z[i]}\n");
                   }

                   File.WriteAllText(imageFile, stringBuilder.ToString()); 
               }
               catch (Exception ex)
               {
                   Log.Logger.Error($" 保存点云出现异常 {ex.Message}");
                   result = "Error";
               }
           });
           return result;
       }

 下面是将LMI gocator2350的点云数据保存为PLY

   public static string SavePointCloudToPLY(string No, SurfacePoint[] sfp)
   {
       string result = "";
       Task.Run(() =>
       {
           try
           {  
               string Dir1 = DateTime.Now.ToString("yyyy-MM-dd");
               string Dir2 = DateTime.Now.ToString("yyyy-MM-dd HH");
               string PreName = DateTime.Now.ToString("yyyy-MM-dd HHmmss");
               string ImageDir = $@"{AppDomain.CurrentDomain.BaseDirectory}Logs\Camera3DFile\{Dir1}\{Dir2}\";

               if (!Directory.Exists(ImageDir))
               {
                   Directory.CreateDirectory(ImageDir);
               }
               string imageFile = $@"{ImageDir}{No}_{YitIdHelper.NextId()}.ply";

               StringBuilder stringBuilder = new StringBuilder();
               stringBuilder.Append("ply\n");
               stringBuilder.Append("format ascii 1.0\n");
               stringBuilder.Append($"element vertex {sfp.Length}\n");
               stringBuilder.Append("property float x\n");
               stringBuilder.Append("property float y\n");
               stringBuilder.Append("property float z\n");
               stringBuilder.Append("end_header\n");

               for (int i = 0; i < sfp.Length; i++)
               {
                   stringBuilder.Append($"{sfp[i].x} {sfp[i].y} {sfp[i].z}\n");
               }

               File.WriteAllText(imageFile, stringBuilder.ToString());
           }
           catch (Exception ex)
           {
               Log.Logger.Error($" 保存点云出现异常 {ex.Message}");
               result = "Error";
           }
       });
       return result;
   }

产生一个随机点云数据,并用Open3D显示如下效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

I.MX6ULL_Linux_驱动篇(51)linux 音频驱动

音频是我们最常用到的功能&#xff0c;音频也是 linux 和安卓的重点应用场合。 I.MX6ULL 带有 SAI接口&#xff0c;正点原子的 I.MX6ULLALPHA 开发板通过此接口外接了一个 WM8960 音频 DAC 芯片&#xff0c;本章我们就来学习一下如何使能 WM8960 驱动&#xff0c;并且通过 WM89…

【MCAL】TC397+EB-tresos之MCU配置实战 - 芯片时钟

本篇文章介绍了在TC397平台使用EB-treso对MCU驱动模块进行配置的实战过程&#xff0c;主要介绍了后续基本每个外设模块都要涉及的芯片时钟部分&#xff0c;帮助读者了解TC397芯片的时钟树结构&#xff0c;在后续计算配置不同外设模块诸如通信速率&#xff0c;定时器周期等&…

自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

首先说到脱敏问题,我相信在座的很多人都需要处理这样的场景,比如前端页面显示的身份证号、地址等敏感信息都需要脱敏处理,而hutool就有这样的一个工具来辅助我们完成对某些字段属性信息的脱敏,hutool没有现成的实现方式,只是借助这个工具帮助我们来具体实现 前言 我们在…

AIGC开发:调用openai的API接口

简介 开始进行最简单的使用&#xff1a;通过API调用openai的模型能力 OpenAI的能力如下图&#xff1a; 文本生成模型 OpenAI 的文本生成模型&#xff08;通常称为生成式预训练 Transformer 或大型语言模型&#xff09;经过训练可以理解自然语言、代码和图像。这些模型提供文…

Bluetooth Mesh 入门学习干货,参考Nordic资料(更新中)

蓝牙网状网络&#xff08;Bluetooth mesh&#xff09;概念 概述 蓝牙Mesh Profile | Bluetooth Technology Website规范&#xff08;Mesh v1.1 后改名Mesh ProtocolMesh Protocol | Bluetooth Technology WebsiteMesh Protocol&#xff09;是由蓝牙技术联盟(Bluetooth SIG)开…

电影《海王2》观后感

上周看了电影《海王2》&#xff0c;整体特效和打斗还是非常不错的&#xff0c;自己在写文章的时候&#xff0c;看完电影已经一周了&#xff0c;相当于是叙事自我在描述这段经历。 &#xff08;1&#xff09;体验自我VS叙事自我 首先简单说明下“体验自我”和“叙事自我”&…

查看ios 应用程序性能

目录 摘要 前言 性能概括 CPU内存监控 内存监控 磁盘监控 网络监控 GPU fps 摘要 本篇博文将介绍一款重量级性能测试工具——克魔助手&#xff0c;针对iOS应用程序的性能监控进行详细介绍。通过克魔助手&#xff0c;开发者可以方便地查看应用程序的CPU、内存、GPU性能…

用OpenDataLab下载PASCAL VOC 2007等公开数据集

OpenDataLab OpenDataLab 公开数据集平台&#xff0c;集海量优质的多模态数据集资源、数据集智能检索、数据可视化展示、数据在线预览、下载优化、标准化管理等功能于一体&#xff0c;力争将平台打造成企业、高校、科研机构等的AI 模型训练的必备利器&#xff0c;帮大家解决数…

【Hive_04】分区分桶表以及文件格式

1、分区表1.1 分区表基本语法&#xff08;1&#xff09;创建分区表&#xff08;2&#xff09;分区表读写数据&#xff08;3&#xff09;分区表基本操作 1.2 二级分区1.3 动态分区 2、分桶表2.1 分桶表的基本语法2.2 分桶排序表 3、文件格式与压缩3.1 Hadoop压缩概述3.2 Hive文件…

前端的 js

js 点击按钮修改文字 <!DOCTYPE html> <html> <head></head><body><h2>Head 中的 JavaScript</h2><p id"demo">一个段落。</p><button type"button" onclick"myFunction()">试一…

全新研发体系助力产品落地 传音控股成科技出海代表

一直以来&#xff0c;手机都被认为是所有新技术的最佳应用载体&#xff0c;尤其是在数字化、智能化时代&#xff0c;技术创新能力决定着手机厂商的生存与发展。 作为全球新兴市场手机行业的中坚力量之一&#xff0c;传音控股始终坚持以技术创新为驱动&#xff0c;围绕用户需求…

零基础学Java第二天

复习回顾&#xff1a; 1.dos命令 dir 显示当前文件夹下面的所有的文件和文件夹 cd 切换目录的 mkdir 创建文件夹的 rd 删除文件夹的 del 删除文件 D: 切换盘符 cls 清屏 2.书写Java代码换行打印《静夜诗》这首古诗 class Demo1 { …

十二:爬虫-Scrapy框架(上)

一&#xff1a;Scrapy介绍 1.Scrapy是什么&#xff1f; Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫&#xff0c;抓取指定网站的内容或图片 Scrapy使用了Twisted异步网…

PayPal账户被封是因为什么?如何解决?

Paypal作为跨境出海玩家最常用的付款工具之一&#xff0c;同时也是最容易出现冻结封号现象。保障PP账号安全非常重要&#xff0c;只有支付渠道安全&#xff0c;才不会“白费力气”&#xff0c;那么最重要的就是要了解它的封号原因以做好规避。 一、Paypal账号被封原因 1、账号…

逻辑卷学习

磁盘分区的缺点 1.无法扩容 2.必须使用的空间 3.没有备份: 一、逻辑卷的定义 LVM 是 Logical Volume Manager 的简称&#xff0c;译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备&#xff0c;并允许用户动态调整文件系统的大小…

Mybatis行为配置之Ⅲ—其他行为配置项说明

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…

【数据结构和算法】---二叉树(2)--堆的实现和应用

目录 一、堆的概念及结构二、堆结构的实现2.1堆向下调整算法2.2堆向上调整算法2.3删除堆顶元素2.4插入元素2.5其他函数接口 三、堆结构的应用3.1堆排序3.2Top-k问题 四、堆概念及结构相关题目 一、堆的概念及结构 如果有一个数字集合&#xff0c;并把它的所有元素按完全二叉树…

水库大坝安全监测设计与施工经验

随着我国的科技水平不断上升&#xff0c;带动了我国的水电建设向更高层次发展。目前&#xff0c;我国的水电站大坝已有上百座&#xff0c;并且大坝安全检测仪器质量与先进技术不断更新发展&#xff0c;如今水电站大坝数据信息采集与观测资料分析&#xff0c;能够有效提高水库大…

C语言编程入门 – 编写第一个Hello, world程序

C语言编程入门 – 编写第一个Hello, world程序 C Programming Entry - Write the first application called “Hello, world!” By JacksonML C语言编程很容易&#xff01; 本文开始&#xff0c;将带领你走过C语言编程之旅&#xff0c;通过实例使你对她颇感兴趣&#xff0c;一…

openGauss学习笔记-176 openGauss 数据库运维-实例主备切换

文章目录 openGauss学习笔记-176 openGauss 数据库运维-实例主备切换176.1 操作场景176.2 操作步骤176.3 示例176.4 错误排查176.5 异常处理 openGauss学习笔记-176 openGauss 数据库运维-实例主备切换 176.1 操作场景 openGauss在运行过程中&#xff0c;数据库管理员可能需要…