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

【Python-Open3D学习笔记】005Mesh相关方法

TriangleMesh相关方法

文章目录

  • TriangleMesh相关方法
    • 1. 查看mesh三角形面信息
    • 2. 可视化三角形
    • 3. 上采样
    • 4. 计算mesh形成的面积和体积

1. 查看mesh三角形面信息

def view_hull_triangles(hull: o3d.geometry.TriangleMesh):"""查看mesh三角形面信息(顶点索引、顶点坐标):param hull::return:"""# 获取三角形的顶点索引triangles = np.asarray(hull.triangles)  # 每个三角形由三个顶点的索引组成# 获取顶点坐标vertices = np.asarray(hull.vertices)  # 所有顶点的坐标print(f"总共有 {len(triangles)} 个三角形面")for i, triangle in enumerate(triangles):print(f"三角形 {i + 1}: 顶点索引 {triangle}, 顶点坐标:")for idx in triangle:print(f"  顶点 {idx}: {vertices[idx]}")return triangles, vertices

2. 可视化三角形

def highlight_triangle(hull: o3d.geometry.TriangleMesh, triangle_idx: int):"""可视化单个三角形:param hull::param triangle_idx::return:"""# 获取三角形索引triangles = np.asarray(hull.triangles)vertices = np.asarray(hull.vertices)# 获取特定三角形的顶点triangle = triangles[triangle_idx]triangle_vertices = vertices[triangle]# 创建一个新点云,表示高亮的三角形highlight = o3d.geometry.TriangleMesh()highlight.vertices = o3d.utility.Vector3dVector(triangle_vertices)highlight.triangles = o3d.utility.Vector3iVector([[0, 1, 2]])highlight.paint_uniform_color([1, 0, 0])  # 高亮颜色:红色# 绘制原始凸包和高亮三角形o3d.visualization.draw_geometries([hull, highlight], window_name="Highlight Triangle")
def highlight_all_triangles(hull: o3d.geometry.TriangleMesh, show=False):"""可视化所有三角形:param hull::param show: 是否直接显示:return:"""# 获取三角形索引和顶点坐标triangles = np.asarray(hull.triangles)vertices = np.asarray(hull.vertices)# 创建一个新三角网格,用于高亮显示highlight_mesh = o3d.geometry.TriangleMesh()# 存储所有高亮的顶点和三角形all_highlighted_vertices = []all_highlighted_triangles = []colors = []for i, triangle in enumerate(triangles):# 获取三角形顶点triangle_vertices = vertices[triangle]# 偏移索引(因为顶点需要连续编号)base_index = len(all_highlighted_vertices)# 添加当前三角形的顶点all_highlighted_vertices.extend(triangle_vertices)# 添加当前三角形的索引(注意偏移)all_highlighted_triangles.append([base_index, base_index + 1, base_index + 2])# 为每个三角形分配随机颜色random_color = np.random.rand(3)  # RGB 随机颜色colors.append(random_color)# 设置高亮网格的顶点、三角形和颜色highlight_mesh.vertices = o3d.utility.Vector3dVector(all_highlighted_vertices)highlight_mesh.triangles = o3d.utility.Vector3iVector(all_highlighted_triangles)highlight_mesh.vertex_colors = o3d.utility.Vector3dVector(np.repeat(colors, 3, axis=0)  # 每个顶点与其三角形共享同样的颜色)# 绘制原始凸包和高亮网格# o3d.visualization.draw_geometries([hull, highlight_mesh], window_name="Highlight All Triangles")if show:o3d.visualization.draw_geometries([highlight_mesh], window_name="Highlight All Triangles")return highlight_mesh

显示效果:

在这里插入图片描述

3. 上采样

def upsample_by_mesh(mesh: o3d.geometry.TriangleMesh, number_of_points: int = 10000):"""通过mesh进行上采样:param mesh::param number_of_points::return:"""dense_pcd = mesh.sample_points_uniformly(number_of_points=number_of_points)return dense_pcd

原始数据:

在这里插入图片描述

上采样后:

在这里插入图片描述

4. 计算mesh形成的面积和体积

def calculate_hull_metrics(hull: o3d.geometry.TriangleMesh):surface_area = 0volume = 0try:if not hull.is_watertight():# print("网格不是水密的!尝试简化修复")hull = hull.simplify_quadric_decimation(target_number_of_triangles=1000)# print("网格是水密的!")# 计算表面积surface_area = hull.get_surface_area()# 计算体积volume = hull.get_volume()return surface_area, volumeexcept Exception as e:print(f"Error occurred: {str(e)}")return surface_area, volume

相关文章:

【Python-Open3D学习笔记】005Mesh相关方法

TriangleMesh相关方法 文章目录 TriangleMesh相关方法1. 查看mesh三角形面信息2. 可视化三角形3. 上采样4. 计算mesh形成的面积和体积 1. 查看mesh三角形面信息 def view_hull_triangles(hull: o3d.geometry.TriangleMesh):"""查看mesh三角形面信息&#xff08…...

js原型、原型链和继承

文章目录 一、原型1、prototype2、constructor 二、原型链1、字面量原型链2、字面量继承3、构造函数的原型链4、Object.create5、Object.setPrototypeOf 三、继承1、构造函数继承2、原型链继承3、组合继承 四、常见链条1、Function2、Object.prototype 继承是指将特性从父代传递…...

团队自创【国王的魔镜-2】

国王的魔镜-2 题目描述 国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话&am…...

c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

在嵌入式系统中,有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器,通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片,驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...

【Jenkins】docker 部署 Jenkins 踩坑笔记

文章目录 1. docker pull 超时2. 初始化找不到 initialAdminPassword 1. docker pull 超时 docker pull 命令拉不下来 docker pull jenkins/jenkins:lts-jdk17 Error response from daemon: Get "https://registry-1.docker.io/v2/": 编辑docker配置 sudo mkdir -…...

Unreal Engine使用Groom 打包后报错

Unreal Engine使用Groom打包后报错 版本5.4.4 blender 4.2.1 项目头发用了groom&#xff0c;运行后报错 错误&#xff1a; Assertion failed: Offset BytesToRead < UncompressedFileSize && Offset > 0 [File:E:\UnrealEngine-5.4.4-release\Engine\Source\R…...

嵌入式QT学习第3天:UI设计器的简单使用

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Qt Creator 里自带的 Qt Designer&#xff0c;使用 Qt Designer 比较方便的构造 UI 界 面。 在 UI 文件添加一个按钮 左边找到 Push Button&#xff0c;然后拖拽到中…...

【连接池】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

图论入门编程

卡码网刷题链接&#xff1a;98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …...

在Java中使用Apache POI导入导出Excel(三)

本文将继续介绍POI的使用&#xff0c;上接在Java中使用Apache POI导入导出Excel&#xff08;二&#xff09; 使用Apache POI组件操作Excel&#xff08;三&#xff09; 24、拆分和冻结窗格 您可以创建两种类型的窗格;冻结窗格和拆分窗格。 冻结窗格按列和行进行拆分。您创建…...

UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e

近日&#xff0c;优傲&#xff08;UR&#xff09;机器人公司立足中国市场需求&#xff0c;重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲&#xff08;UR&#xff09;一以贯之的高品质与性能特质&#xff0c;着重优化负载自重比&#xff0c;且在价格层面具竞争力&…...

FRU文件

FRU&#xff08;Field Replaceable Unit&#xff09;源文件的格式通常遵循IPMI FRU Information Storage Definition标准。在实际应用中&#xff0c;FRU源文件可以是JSON格式的&#xff0c;这种格式允许用户指定所有的FRU信息字段。以下是FRU源文件的JSON格式的一些关键点&…...

AI需求条目化全面升级!支持多格式需求,打破模板限制!

AI需求条目化全面升级&#xff01;支持多格式需求&#xff0c;打破模板限制&#xff01; 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式&#xff0c;不再受限于模板文件&#xff0c;能够一键自动快速且灵活地生…...

Java—I/O流

Java的I/O流&#xff08;输入/输出流&#xff09;是用于在程序和外部资源&#xff08;如文件、网络连接等&#xff09;之间进行数据交换的机制。通过I/O流&#xff0c;可以实现从外部资源读取数据&#xff08;输入流&#xff09;或将数据写入外部资源&#xff08;输出流&#x…...

Huginn服务部署

工作中需要使用爬虫系统&#xff0c;做为技术选型需要对Huginn系统进行部署并进行功能验证。下面的文章会记录了Huginn的部署过程&#xff0c;本次部署采用的Ubuntu-23.0.4系统&#xff0c;使用Docker部署。部署过程需要翻墙。 一、安装Docker 删除旧版本 sudo apt-get remo…...

深入解析Java数据包装类型:特性、机制与最佳实践

文章目录 1. 基本概念2. 自动装箱与拆箱3. 缓存机制4. 不可变性5. 常见陷阱与最佳实践a. 空指针异常b. 不要用 比较两个包装类实例c. 高精度计算d. 字符串解析 总结 1. 基本概念 Java提供了每个基本数据类型的包装类&#xff0c;位于java.lang包中。这些包装类允许我们将基本…...

【Java基础入门篇】二、控制语句和递归算法

Java基础入门篇 二、控制语句和递归算法 2.1 switch-case多分支选择语句 switch执行case语句块时&#xff0c;若没有遇到break&#xff0c;则运行下一个case直到遇到break&#xff0c;最后的default表示当没有case与之匹配时&#xff0c;默认执行的内容&#xff0c;代码示例如…...

PostgreSQL WAL日志膨胀处理

作者&#xff1a;Digital Observer&#xff08;施嘉伟&#xff09; Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验&#xff0c;现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、P…...

用户该怎么管理维护自己的服务器?

管理和维护自己的服务器是确保其长期稳定、高效和安全运行的重要任务。以下是一些关键的服务器管理和维护的步骤和建议&#xff0c;适用于Linux或Windows服务器。 1.定期备份数据 定期备份是防止数据丢失和恢复故障的关键步骤。备份策略应包括&#xff1a; 全量备份&#xff1a…...

【MYSQL数据库相关知识介绍】

MySQL 在我们日常技术中是一个广泛使用的开源关系型数据库管理系统&#xff0c;所以作为测试同学&#xff0c;掌握mysql的相关知识是必不可少的技能之一&#xff0c;所以小编从软件测试的角色出发&#xff0c;来整理一些跟测试相关的知识&#xff0c;希望能够帮助到大家。 一、…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...