open3D打开stl文件的坑!!

open3d操作.ply文件(点云) open3d 处理point cloud 阅读详情

项目场景:

本来一个10w点的stl点云文件,用meshlab,pyvista,cloudcompare等打开显示的都是10w点,用open3D打开偏偏显示的是60w点


问题描述

本来一个10w点的stl点云文件,用meshlab,pyvista,cloudcompare等打开显示的都是10w点,用open3D打开偏偏显示的是60w点, 导致我跑网络时爆了显存。
使用open3D检查发现,60w里其他的都是重复点,合并重复点之后就还是10w点,但是合并之后保存成stl文件,再用open3D打开就又变成60w点了。

import open3d as o3d

def process_stl_file(file_path):
    # 读取 STL 文件
    mesh = o3d.io.read_triangle_mesh(file_path)

    # 记录原始顶点数量
    original_vertices = len(mesh.vertices)

    # 合并重复顶点
    mesh = mesh.remove_duplicated_vertices()

    # 记录合并后的顶点数量
    merged_vertices = len(mesh.vertices)

    # 输出顶点数量变化
    print(f"原始顶点数量:{original_vertices}")
    print(f"合并后顶点数量:{merged_vertices}")

    # 计算法线
    mesh.compute_vertex_normals()

    # 覆盖保存 STL 文件
    o3d.io.write_triangle_mesh(file_path, mesh)

    # 再次加载检查
    mesh_reloaded = o3d.io.read_triangle_mesh(file_path)
    print(f"重载后顶点数量:{len(mesh_reloaded.vertices)}")

    # 再次处理重复顶点
    mesh_reloaded = mesh_reloaded.remove_duplicated_vertices()
    print(f"重载后(处理重复顶点)顶点数量:{len(mesh_reloaded.vertices)}")

# 调用处理函数
file_path = r"F:\scratch1\0.stl"
process_stl_file(file_path)


原因分析:

先说结论:stl文件没有问题,问题在open3d读取stl文件的逻辑上

STL 文件格式通常不包含顶点索引,而是将每个三角形的三个顶点直接存储。这意味着即使不同三角形共享相同的顶点,STL 文件中也会重复存储这些顶点。
当你从 STL 文件中读取网格时,Open3D 会将这些顶点重新加载,因此可能再次出现重复的顶点。


解决方案:

1.在跑网络时,用open3D读取stl后加入 mesh = mesh.remove_duplicated_vertices() ,就可以快速解决问题
2.将stl转化成ply文件,再用open3D读取

open3d 点云、图像、网格的读取、保存、显示 阅读详情

相关推荐

Open3D学习笔记一【初窥门径,文件读取】

open3d入门第一篇

下次你路过,人间已无我 2298

Open3d 常用数据格式说明:pcd, ply, stl等

ply格式即Polygon File Format,又称斯坦福三角形文件,其内容分为文件头和数据,其中文件头通过ASCII编码,数据可以采取ASCII或者二进制的形式。ASCII格式则按行写入数据,每个三角面由7行数据构成,内容与二进制的50个字节相同,其书写结构大致为。为首行,第二行为文件格式,一般来说有三种写法,分别表示ASCII,或者大小端序存放的二进制文件。在数据部分,以50个字节为一个三角面,逐个给出每个三角面片的几何信息。为数据类型,支持主要的C语言类型,包括两种写法,一种指定数据位数,包括。

微小冷的学习笔记 5337

open3d学习笔记二【文件读写】

官方文档的读取函数 函数 参数 open3d.io.read_azure_kinect_mkv_metadata (filename) open3d.io.read_azure_kinect_sensor_config (filename) open3d.io.read_feature (filename) open3d.io.read_file_geometry_type(读取文件的几何类型) ( arg0 : str )(return(open3d.cpu.pybind.io

下次你路过,人间已无我 1876

open3d,读取stl/ply/obj/off/gltf/glb三维模型,并转换成点云,保存

open3d,读取stl/ply/obj/off/gltf/glb三维模型,并转换成点云,保存

欢迎一起成长呀 1万+

Open3D File Io 文件IO

oepn3d文件IO。读写点云、网格、图片

一只大鸽子的博客 1302

使用Open3D库处理3D模型数据的实践指南

从加载模型数据开始,经过一系列的处理步骤,如去除无效面、优化模型、提取特征等,到最后可视化处理后的模型数据,Open3D库都提供了相应的函数和方法。Open3D库提供了各种功能,包括3D数据加载、处理、可视化以及3D图像处理等。要加载3D模型数据,可以使用open3d.geometry.load_mesh()函数。总之,使用Open3D库处理3D模型数据需要我们注意数据格式、精度、处理速度、可视化效果和依赖项等方面的问题。Open3D库提供了强大的可视化功能,可以让我们直观地查看和处理3D模型数据。

这家伙很懒,什么都没有留下 1111

Open3d点云处理之stl格式转pcd文件

可以用于前期学习,适合有建模功底的人奥。

kolentonmk的博客 979

Open3D读取文件

本结主要介绍了Open3D操作常见点云和三角网格文件的函数及其用法。

2556

2.Open3D教程——文件读取和保存

文件读取和保存 本教程演示了Open3D如何读写基本数据结构。 1. 点云 下面的代码读取和写入点云。 print("Testing IO for point cloud ...") pcd = o3d.io.read_point_cloud("../../test_data/fragment.pcd") print(pcd) o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd) 默认情况下,Open3D尝试通过文件扩展名推断文件类型。支持以下点云文件

lzfshub 1万+

STL文件如何在编程中打开和处理

STL文件是一种常见的三维模型文件格式,在编程中可以使用各种软件和库来打开和处理STL文件。本文介绍了使用Python的numpy-stl库和C++的Open3D库的方法,并提供了相应的代码示例。通过这些方法,您可以轻松地读取和处理STL文件,并进行各种模型分析和修改操作,以满足您的需求。在编程中,我们可以使用各种软件和库来打开和处理STL文件,以进行模型的分析、修改和生成等操作。下面将介绍几种常用的方法和示例代码。通过上述代码,我们可以使用numpy-stl库打开STL文件,并访问模型的顶点和面片数据。

HackCyberX的博客 927

stl、obj、3DS三种3D模型加载,使用OpenGl+GLSL框架并添加双层纹理,并完成逐顶点光照和逐像素光照(GouraudShading+PhongS)

stl、obj、3DS三种3D模型加载,使用OpenGl+GLSL框架并添加双层纹理,并完成逐顶点光照和逐像素光照(GouraudShading+PhongS)

从三维网格到离散点云:Open3D实战PLY/STL转PCD格式解析

本文详细解析了如何使用Open3D将PLY/STL三维网格文件转换为PCD点云格式,涵盖了环境配置、数据准备、技术细节、性能优化及常见问题排查。通过实战案例和代码示例,帮助开发者高效处理三维数据转换,适用于点云配准、三维重建等应用场景。

weixin_30872499的博客 637

OpenGL显示任意Stl文件

通过解析STL文件,使得STL格式的3D模型文件能在手机上显示出来!

Open3d之文件IO

文件IO 本教程介绍了Open3D如何读写基本数据结构。 点云(Point Cloud) 下面读取和写入点云的实力。 # -*-coding:utf-8 -*- import open3d as o3d # 读取点云 pcd = o3d.io.read_point_cloud("fragment.pcd") # 打印点云的摘要信息 print(pcd) # 写点云 o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd) 默认情况下,Ope

ancy的博客 1927

基于opentk的3D模型(STL格式)显示旋转缩放等功能

编译器是vs2015,用的是opentk库做的3D显示引擎

数学不好是原罪——高等数学笔记(汇总版)

这是本人之前考研的高数手写笔记,工科学硕数一考了146(满分150),笔记有一定参考价值,欢迎大家收藏借鉴。

xuuyann 5万+

ply,stl 三维mesh网格结构转点云pcd(基于open3d)

常见的三维数据格式有pcd,ply,stl. 数据结构解释: 1. ply,stl 用来表示三维网格数据,这种数据结构均包含两种要素, 其一为顶点V(Vertices),就是由三维模型中每个顶点的三维(x,y,z)坐标构成。表征三维模型的空间位置。 其二为三角网格F(也称为面片Face), 就是对顶点V的下标(序号)进行组合,三个顶点构成一个三角网格,如下图为mesh网格的细节放大图示,表征三维模型的拓扑结构。 用著名的斯坦福兔子Bunny举例,如下图显示为Bunny.ply。 将Bun

u010824101的博客 1万+

抖音短连接v.douyin.com/xxx 如何生成?

最近公司有个需求,在抖音里如何宣传自己的网站,并且不要有拦截域名的提示,截图如下。 通过ida反编译抖音的app后,将下载后的ipa文件用解压缩软件(如7zip等)解压,从解压后的目录Payload/Aweme.app/找到Aweme可执行文件,拖入ida进行反编译,ida可以检测objective-c语法。 然后进入主题,既然是聊天发消息,就尝试在ida里搜索"message",看看能否找到对...

kakuapi的博客 3万+

从Mesh到点云:Open3D处理PLY/STL文件时,你可能忽略的顶点法线与可视化细节

本文深入探讨了Open3D处理PLY/STL文件时顶点法线的重要性及其对点云可视化和深度学习模型的影响。通过对比PLY与STL格式的属性差异,提供了详细的转换验证方法和工业级最佳实践,帮助开发者避免常见误区并优化处理流程。

weixin_29058331的博客 377

如何使用3D高斯分布进行环境建模

使用3D高斯分布来进行建模,关键在于通过引入不确定性描述来提高建图的鲁棒性和精度。与传统点云表示相比,3D高斯分布提供了一种更为灵活和有效的方式来处理空间数据,能够通过协方差矩阵表示点的空间不确定性,帮助优化SLAM过程中的定位和地图更新。

JaydenQ的博客 2356

RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0707

Reading Notes of Resistive Random Access Memory – Day 2 Chapter 3 RRAM Characterization and Modeling Overview of RRAM Physical Mechanism A general picture for the filamentary switching mechanism. Forming: 对本征RRAM样本,加电压VformingV_{forming}Vforming​,中间氧化层的O

Blog of Lucky H6 992

Open3D文件类型

Open3D文件类型简介 Open3D是一个开源库,支持快速开发处理3D数据的软件。Open3D在C++和Python中公开了一组精心挑选的数据结构和算法。后端经过了高度优化,并设置为并行化。它的代码是干净的、风格一致的。 下面介绍一个我在学习Open3D的时候常用的文件类型: *.obj 是一种文本文件。通常用以“#”开头的注释行作为文件头。数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符。 对于点云数据来说,其中最基本的两个关键字: 1.v 几何体顶点(Geometric

Satellite_H的博客 818

YOLOv8的二次创新 | 结合iRMB与EMA打造全新的iEMA机制,提升动态检测性能【附保姆级代码】

YOLOv8继承了YOLO系列的轻量化和高效检测特性,同时通过改进的架构设计使得其在实时场景下具有更高的检测精度。然而,随着检测需求的增加,尤其是在动态目标检测和长时间序列检测中,YOLOv8的鲁棒性依然可以提升。通过iEMA机制的引入,我们将在这些方面进行进一步优化。iRMB模块是我们对传统Residual Block的进一步改进。通过多层特征提取,iRMB能够捕捉更多层次的特征信息,并通过引入轻量化的残差结构,提升计算效率。

一键难忘的博客 3086
MapleZBZ
博客等级 码龄7年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值