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

第四课Open3D点云数据处理:读写网格模型(mesh)与格式转换

1 mesh 加载函数

1.1 函数原型

1.2 参数说明

1.3代码展示

​编辑

1.4 判断mesh文件是否读取成功

2 mesh 保存函数

2.1 函数原型

2.2 参数说明

2.3 代码示例

2.4 Open3D支持的mesh类型

3 mesh 格式转换

3.1 ply 转 obj

3.2 ply 转 stl

3.3 ply 转 off

3.4 ply 转 gltf

1 mesh 加载函数

1.1 函数原型

read_triangle_mesh(filename: str, enable_post_processing: bool = False, print_progress: bool = False)

1.2 参数说明

  • filename,要可视化mesh的的路径和文件名。必选参数

当调用read_triangle_mesh函数时,需要将要读取的文件的路径和文件名作为filename参数传递给该函数。函数将解析该文件并将其转换为Open3D中的三角网格数据结构,该数据结构包含三角形的顶点和面片信息。通过这种方式,可以方便地使用Open3D库对三角网格进行可视化、处理、分析等操作。

  • enable_post_processing参数是用于控制是否启用后处理的选项。可选参数

在读取三角网格时,Open3D会对其进行一些后处理操作,包括去除重复的顶点和边缘,移除无用的顶点和边缘,以及重新计算法线等。这些后处理操作可以优化三角网格,使其更加紧凑和高效。当 enable_post_processing 参数设置为 True 时,将启用这些后处理操作;当设置为 False 时,则不启用。默认情况下,该参数被设置为 False。

  • print_progress参数用于控制是否在读取模型时输出读取进度信息。可选参数

默认情况下,该参数为False,不会在读取过程中输出进度信息,如果将其设置为True,则会输出进度信息。
如果读取的模型较大,可能需要一些时间来完成读取,因此在读取过程中输出进度信息对于了解读取进展情况非常有用。但是,在某些情况下,例如只需要读取一个非常小的模型时,输出进度信息可能会显得多余,所以可以通过设置该参数来控制输出行为。

1.3代码展示

import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) o3d.visualization.draw_geometries([mesh],window_name='把门开开',mesh_show_wireframe=False)

1.4 判断mesh文件是否读取成功

使用is_empty()函数判断

  • True:未读取到mesh文件
  • False:成功读取mesh文件
import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) o3d.visualization.draw_geometries([mesh],window_name='把门开开',mesh_show_wireframe=False)

2 mesh 保存函数

2.1 函数原型

write_triangle_mesh(filename:str,mesh:open3d.cpu.pybind.geometry.TriangleMesh,write_ascii:bool=False,compressed:bool=False,write_vertex_normals:bool=True,write_vertex_colors:bool=True,write_triangle_uvs:bool=True,print_progress:bool=False)

2.2 参数说明

  • filename必选参数,要保存的文件的路径和名称。
  • mesh必选参数,要保存的 TriangleMesh 对象。
  • write_ascii可选参数,默认为 False,表示是否将数据以 ASCII 格式写入文件。如果设置为 True,则数据将以可读的文本形式写入文件,否则以二进制形式(binary)写入文件。
  • compressed可选参数,默认为 False,表示是否将数据压缩写入文件。如果设置为 True,则写入的数据将会被压缩,否则不会。
  • write_vertex_normals可选参数,默认为 True,表示是否要写入顶点法线数据。
  • write_vertex_colors可选参数,默认为 True,表示是否要写入顶点颜色数据。
  • write_triangle_uvs可选参数,默认为 True,表示是否要写入三角形 UV 数据。
  • print_progress可选参数,默认为 False,表示是否要在控制台打印写入进度。

需要注意的是,这些参数并不是全部必须要传入的,只需要传入需要的参数即可。

2.3 代码示例

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) print("->保存ply...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.ply",mesh) # 读取保存的文件重新展示 print("->重新加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.ply") o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True)

2.4Open3D支持的mesh类型

格式描述
ply一种通用的3D模型文件格式,可以存储点云、网格和曲面等各种类型的3D数据。通常包含顶点信息、面信息、法线信息、纹理坐标信息和颜色信息等。
stl一种简单的3D模型文件格式,通常用于存储三角形网格数据。STL文件包含了每个三角形的三个顶点坐标和法线向量信息。
obj一种通用的3D模型文件格式,它可以存储多边形网格、曲面和点云等各种类型的3D数据。OBJ文件通常包含顶点信息、面信息、纹理坐标信息和法线信息等。
off一种简单的3D模型文件格式,通常用于存储多边形网格数据。OFF文件包含了每个顶点的坐标信息和每个面的顶点索引信息。
gltf一种新兴的3D模型文件格式,它使用JSON作为数据格式,可以存储多种类型的3D数据,例如网格、材质、动画和场景等。
glb一种二进制的gltf格式,它将gltf文件打包成一个二进制文件,可以更快地加载和渲染3D模型。

3 mesh 格式转换

以ply转换为Open3D支持的其他mesh格式为例。

3.1 ply 转 obj

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

3.2 ply 转 stl

转换之前要确保 ply格式的mesh含有法线,否则需要计算法线后才能执行ply 转 stl操作。

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

3.3 ply 转 off

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

3.4 ply 转 gltf

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

http://www.jsqmd.com/news/160957/

相关文章:

  • 清华TUNA镜像站加速PyTorch-CUDA-v2.7下载实测
  • C语言随堂笔记-8
  • 2025年粉体自动拆包机供应商/生产厂家推荐与采购指南 - 品牌推荐大师1
  • 第五课-Open3D点云数据处理:点云、mesh可视化(draw_geometries方法)
  • 2025年粤港澳跨境出行核心攻略:中港车牌代办与粤Z车牌代办公司权威推荐 - 品致汇
  • Leetcode 56.合并区间 JavaScript (Day 6)
  • 多线程任务管理系统
  • 如何定制自己的PyTorch-CUDA镜像?基于v2.7二次开发指南
  • 第六课Open3D点云数据处理:点云、mesh可视化(Visualizer类)
  • WSL2下运行PyTorch-CUDA-v2.7镜像的完整配置流程
  • Conda环境导出与导入:PyTorch-CUDA-v2.7跨机器迁移技巧
  • 软件工程 课程回顾 102301321 吴颖哲
  • Git克隆项目后如何快速运行?配合PyTorch镜像免依赖烦恼
  • 2025年12月淮北无人机表演、淮北CAAC无人机培训、淮北政企无人机培训、淮北退役军人无人机培训、淮北无人机培训机构哪家强 - 2025年品牌推荐榜
  • CNN图像分类项目快速上手:基于PyTorch-CUDA-v2.7镜像教程
  • 中性点直流偏磁在线监测推荐生产厂家 - 品牌推荐大师1
  • 无需手动编译:PyTorch-CUDA-v2.7镜像自动匹配驱动版本
  • Anaconda配置PyTorch环境太麻烦?试试PyTorch-CUDA-v2.7镜像
  • Linux软链接应用详解:从原理到实战案例
  • 傅里叶变换(四):直角坐标与极坐标
  • PyTorch官方安装步骤太复杂?这个镜像简化90%流程
  • 轻量级深度学习环境:PyTorch-CUDA-v2.7仅需2分钟启动
  • 手把手教学:在云平台拉取并运行PyTorch-CUDA-v2.7镜像
  • 2026年上半年徐州室内装修/室内设计/全屋定制/精装局改/软装搭配公司综合评估与选型指南 - 2025年品牌推荐榜
  • Markdown笔记记录实验过程:配合Jupyter和PyTorch镜像高效科研
  • PyTorch安装教程GPU版:基于CUDA-v2.7镜像的高效配置方案
  • PyTorch-CUDA-v2.7镜像是否支持A100?实测结果公布
  • Markdown语法高亮设置:正确显示PyTorch代码块
  • 旧版PyTorch升级指南:迁移到v2.7镜像的注意事项
  • 2025年高性价比的精密铝材加工工厂推荐,精密铝材加工供应商全解析 - 工业品牌热点