open3d读取、显示和保存点云数据

2023-11-08

1、从文件中读取点云

接口1

bool open3d::io::ReadPointCloud	(	const std::string & 	filename,
geometry::PointCloud & 	pointcloud,
const ReadPointCloudOption & 	params = {} 
)	

接口2

bool open3d::io::ReadPointCloud	(	const std::string & 	filename,
geometry::PointCloud & 	pointcloud,
const std::string & 	file_format,
bool 	remove_nan_points,
bool 	remove_infinite_points,
bool 	print_progress 
)	

接口3

从扩展名中读取点云

bool open3d::io::ReadPointCloudFromPCD	(	const std::string & 	filename,
geometry::PointCloud & 	pointcloud,
const ReadPointCloudOption & 	params 
)	

bool open3d::io::ReadPointCloudFromPLY	(	const std::string & 	filename,
geometry::PointCloud & 	pointcloud,
const ReadPointCloudOption & 	params 

2、保存点云

WritePointCloud()

bool open3d::io::WritePointCloud	(	const std::string & 	filename,
const geometry::PointCloud & 	pointcloud,
const WritePointCloudOption & 	params = {} 
)	

bool open3d::io::WritePointCloud	(	const std::string & 	filename,
const geometry::PointCloud & 	pointcloud,
bool 	write_ascii,
bool 	compressed,
bool 	print_progress 
)		

// 扩展名保存
bool open3d::io::WritePointCloudToPCD	(	const std::string & 	filename,
const geometry::PointCloud & 	pointcloud,
const WritePointCloudOption & 	params 
)		

bool open3d::io::WritePointCloudToPLY	(	const std::string & 	filename,
const geometry::PointCloud & 	pointcloud,
const WritePointCloudOption & 	params 
)	

3、读取点云

#include <iostream>
#include <Open3D/Open3D.h>

int main(int argc, char* argv[])
{

	std::string fileName("bunny.pcd");
	auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>();
	if (open3d::io::ReadPointCloud(fileName, *cloud_ptr) == 0)
	{
		open3d::utility::LogWarning("Failed to read {}\n\n", fileName);
		return -1;
	}

	cloud_ptr->NormalizeNormals(); // 将法向量归一化到1
	open3d::visualization::DrawGeometries({ cloud_ptr }, "PointCloud", 1600, 900);
	open3d::io::WritePointCloudToPCD("bunny1.pcd", *cloud_ptr, false);

	return 0;
}

读取txt格式点云

#include <iostream>
#include <Open3D/Open3D.h>

int main(int argc, char* argv[])
{
	std::string fileName("bunny.txt");
	auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>();
	if (open3d::io::ReadPointCloudFromXYZ(fileName, *cloud_ptr, {"xyz"}) == 0)
	{// 或者用open3d::io::ReadPointCloud(fileName, *cloud_ptr, { "xyz" });
		
		open3d::utility::LogWarning("Failed to read {}\n\n", fileName);
		return -1;
	}

	cloud_ptr->NormalizeNormals(); // 将法向量归一化到1
	open3d::visualization::DrawGeometries({ cloud_ptr }, "PointCloud", 1600, 900);
	open3d::io::WritePointCloudToPCD("bunny1.pcd", *cloud_ptr, false);

	return 0;
}

4、显示点云

#include <iostream>
#include <Open3D/Open3D.h>

int main(int argc, char* argv[])
{

	
	auto source = std::make_shared<open3d::geometry::PointCloud>();
	if (open3d::io::ReadPointCloud("1.pcd", *source) == 0)
	{
		open3d::utility::LogWarning("点云读取失败!!!\n");
		return -1;
	}
	if(source->HasNormals())
	source->NormalizeNormals(); // 将法向量归一化到1

	auto target = std::make_shared<open3d::geometry::PointCloud>();
	if (open3d::io::ReadPointCloud("2.pcd", *target) == 0)
	{
		open3d::utility::LogWarning("点云读取失败!!!\n\n");
		return -1;
	}
	if (target->HasNormals())
		target->NormalizeNormals(); // 将法向量归一化到1
	Eigen::Vector3d color{ 0.0,0.0,1.0 };
	target->PaintUniformColor(color);
	open3d::visualization::DrawGeometries({ source ,target }, "PointCloud", 1600, 900);

	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

open3d读取、显示和保存点云数据 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没
  • 当我使用 OpenSSL1.1.0g 根据固定的 p 和 g 值创建 Diffie Hellman 密钥协议密钥时,应该执行哪些检查?

    您好 我尝试通过这段代码使用修复 p 和 g 参数来制作 Diffie Hellman Keysanswer https stackoverflow com a 54538811 4706711 include

随机推荐

  • PAT : PAT (Basic Level) Practice(中文)答案(1001 ~ 1095)(纯C编写)

    题目集地址 报名了12月的PAT B 先试试水 已完成 2018 10 22 2018 11 14 更新 2018 12 09 PAT乙级考试100分 考试代码已更新 冬天坐火车跑去考试冻懵了 来年对战PAT甲级考试 目录 目录 题目集地址
  • Transactional outbox pattern

    文章目录 Transactional outbox pattern 事件驱动架构 Event Driven Architecture EDA 数据库事务和消息发布的一致性问题 Transactional outbox如何解决数据事务和消息发
  • FastDFS踩坑记

    FastDFS踩坑记 本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号 分享几个收集到的FastDFS踩坑案例 供大家参考 以防掉进同一个坑里 欢迎在评论区补充踩坑案例 案例一 我在之前的公司碰到的案例 st
  • HTML5&CSS3笔记:CSS3过渡、变形和动画

    目前的情况是 如果页面上需要一些动画效果 要么你自己编写 JavaScript 要么使用 JavaScript 框架 如 jQuery 来提高效率 但是 虽然 CSS3 不可能在短期内取代 jQuery 或类似的框架 但它完全有能力做一些如
  • in和exsits、count(*)查询优化

    一 in和exsits 1 1 原则 小表驱动大表 即小的数据集驱动大的数据集 1 2 in 适用场景 当B表的数据集小于A表的数据集时 in优于exists select from A where id in select id from
  • VC的血与泪,最难尽调的是人性————失败风投案例分析

    VC的血与泪 最难尽调的是人性 失败风投案例分析 风险投资 Venture Capital 简称是VC 在中国是一个约定俗成的具有特定内涵的概念 其实把它翻译成创业投资更为妥当 广义的风险投资泛指一切具有高风险 高潜在收益的投资 狭义的风险
  • 【因果推断与机器学习】Causal Inference:Chapter_3

    Identification 当我们以因果结构图模型的形式捕获了我们的因果假设 因果分析的第二个阶段就是识别 在这个阶段 我们的目标是分析我们的因果模型 包括特征之间的因果关系以及观察到哪些特征 以确定我们是否有足够的信息来回答特定的因果推
  • UE4 C++ 结构体数组使用AddUnique方法添加元素报错

    当使用TArray的AddUnique方法给结构体数组添加元素时 如果结构体没有重写 操作符时就会报错 那么为什么会报这个错呢 因为AddUnique方法在添加元素前会将传入的元素在数组内搜索一遍 也就是Find 函数 在Find函数内部用
  • 【译】通过 Rust 学习解析器组合器 — Part 1

    原文地址 Learning Parser Combinators With Rust 原文作者 Bodil 译文出自 掘金翻译计划 本文永久链接 https github com xitu gold miner blob master TO
  • 数据结构——链表例题1

    1 在递增有序链表L中插入值为x的元素 使L依旧保持递增 void Insert LinkList L DataType x LinkList p L q p gt next s while x gt q gt data q NULL q可
  • 基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

    视频讲解 Vision Transformer的鸟类图像分类 200个类别 完整代码 数据 哔哩哔哩 bilibili 项目结构 数据展示 主要的运行代码 import os import math import random import
  • 深入理解生产者与消费者问题

    缓冲区的形象理解 缓冲区好像使用一条传送带替代托架 传送带上一次可以放多个产品 生产者在缓冲区尾加入数据 消费者在缓冲区头读取数据 缓冲区满时 缓冲区上锁并等待消费者线程读取数据 每一个生产或消费动作使得传送带向前移动一个单位 因此 消费者
  • Day22_7 Java学习之对象数组

    目录 一 什么是对象数组 二 对象数组的作用 三 对象数组的语法定义及动静初始化 语法定义 静态初始化 在定义数组的同时对数组元素进行初始化 动态初始化 使用运算符new为数组分配空间 四 对象数组案例演示 案例需求 具体实现代码 一 什么
  • 《数据结构》第4章 串、数组和广义表

    数据结构 第4章 串 数组和广义表 第4章 串 数组和广义表 4 1 串的定义 4 2 串的类型定义 存储及其 运算 知识点1 串的表示 方法1 定长顺序存储表示 方法2 堆分配存储表示 方法3 串的块链存储表示 知识点2 必考 串的模式匹
  • Snipaste - 截图工具

    Snipaste 简介 Snipaste 是一个简单开源且强大的截图工具 也可以让你将截图贴回到屏幕上 下载并打开 Snipaste 按下 F1 来开始截图 再按 F3 截图就在桌面置顶显示了 就这么简单 你还可以将剪贴板里的文字或者颜色信
  • VS2008配置opencv

    配置过程 1 需要先提前安装好VS2008并下载好opencv的库 2 配置Windows环境变量 具体步骤为 右键我的电脑 属性 详细设定标签里 gt 环境变量 gt 系统变量 找到Path 将D Program Files opencv
  • 网络通信之应用层协议--Linux

    文章目录 关于应用层协议的理解 应用层协议的制定 理论部分 代码部分 完整代码以及测试 HTTP协议 代码测试HTTP协议 HTTPS协议 加密原因 基础的加密方式 数据摘要 数据指纹 数字签名 HTTPS的加密方式的选择 总结 关于应用层
  • OWASP TOP-10(2023) API风险

    OWASP API 1 对象级别授权失效 水平越权 攻击者就可以通过改变请求中的对象ID来绕过授权限制 从而获取敏感数据或者完全掌控账户 这个漏洞在基于API的应用程序中非常普遍 因为服务器通常无法跟踪完整的用户状态 而是依赖于请求参数中的
  • 网络攻防复习篇

    绪论 1 网络空间的4个要素 设施 数据 用户 操作 见第一章PPT 61页 下面这个图要背好 2 网络空间安全基本概念 络空间安全涉及到 络空间中的电磁设备 电 信息系统 运 数据和系统应 中所存在的安全问题 既要防 保护 信息通信技术系
  • open3d读取、显示和保存点云数据

    1 从文件中读取点云 接口1 bool open3d io ReadPointCloud const std string filename geometry PointCloud pointcloud const ReadPointClo