Open3D可以读取点云文件,三角网格文件,也可以读取图片。具体方法如下:
一、点云文件操作
Open3D支持的文件格式有xyz,xyzn,xyzrgb,pts,ply,pcd等文件。读取的方式也非常简单。data = o3d.io.read_point_cloud("文件名“)
1、读写文件
函数原型如下:
open3d.io.
read_point_cloud
(filename, format='auto', remove_nan_points=False, remove_infinite_points=False, print_progress=False)
参数解释:
- filename (str) – 文件路径.
- format (str, optional, default='auto') – 文件格式,如果没有特殊的说明或设置为auto,文件的格式来自文件的扩展名.
- remove_nan_points (bool, optional, default=False) – 如果为true,则在点云数据中移除NaN的点。
- remove_infinite_points (bool, optional, default=False) – 如果为true,则在点云数据中移除值为无穷的点。
- print_progress (bool, optional, default=False) – 如果设置为true,在加载文件时可以看到进度条。
- 返回值:open3d.geometry.PointCloud
2、保存点云文件
o3d.io.write_point_cloud("文件名",data),函数原型:open3d.io.
write_point_cloud
(filename, pointcloud, write_ascii=False, compressed=False, print_progress=False)
参数解释:
- filename (str) – 文件路径.
- pointcloud (open3d.geometry.PointCloud) –
PointCloud对象
- write_ascii (bool, optional, default=False) – 如果为true,则输出文件为Asscii格式,否则为二进制格式.
- compressed (bool, optional, default=False) – 如果为true,则对文件进行压缩.
- print_progress (bool, optional, default=False) – 如果为true,则显示进度条.
- 返回值:bool
3、举例
pcd = o3d.io.read_point_cloud("bunny.ply") print(pcd) # 输出点云个数 o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd) # 保存点云数据 o3d.visualization.draw_geometries([pcd], width=800, height=600) # 显示点云
二、读取/保存图片
读取和保存图片的函数很简单,直接上例子。
img = o3d.io.read_image("文件名")
print(img)
o3d.io.write_image("文件", img)
o3d.visualization.draw_geometries([img], window_name="Open3D图像显示",
width=800, height=600,
left=100, top=200,
mesh_show_back_face=False)
三、三角网格文件
Open3D支持读取的网格文件有:ply(Polygon File Format),STL(StereoLighography),OBJ(Objects Files),OFF(Object file format),GLTF/GLB(GL Transmission Format)。
1、读取文件
函数原型如下:
open3d.io.
read_triangle_mesh
(filename, enable_post_processing=False, print_progress=False)
参数解释:
- filename (str) – 文件路径.
- enable_post_processing (bool, optional, default=False) –
- print_progress (bool, optional, default=False) – 如果为true,则在控制台可以看到进度条。
- 返回值:open3d.geometry.TriangleMesh
2、保存文件
函数原型如下:
open3d.io.
write_triangle_mesh
(filename, mesh, write_ascii=False, compressed=False, write_vertex_normals=True, write_vertex_colors=True, write_triangle_uvs=True, print_progress=False)
参数解释:
- filename (str) – 文件路径.
- mesh (open3d.geometry.TriangleMesh) –
TriangleMesh对象
- write_ascii (bool, optional, default=False) – 如果为true,则用Ascii格式保存,否则用二进制保存文件。
- compressed (bool, optional, default=False) – 如果为true,则对文件进行压缩.
- write_vertex_normals (bool, optional, default=True) – 如果为false,则不存储顶点的法线信息.
- write_vertex_colors (bool, optional, default=True) – 如果为false,则不存储顶点的颜色信息.
- write_triangle_uvs (bool, optional, default=True) – 如果为false,则不存储任何三角形UV信息。对于OBJ格式文件,只有在设置为true时才保存mtl文件。
- print_progress (bool, optional, default=False) – 如果设置为true,则在控制台显示进度条。
- 返回值:bool
3、举例
knot_data = o3d.data.KnotMesh()
print(f"Reading mesh from file: knot.ply stored at {knot_data.path}")
mesh = o3d.io.read_triangle_mesh(knot_data.path, print_progress=True)
print(mesh) # 此处会打印文件的顶点个数和三角形的个数
print("Saving mesh to file: copy_of_knot.ply")
o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)
o3d.visualization.draw_geometries([mesh], window_name="Open3D三角网格",
width=800, height=600,
left=100, top=200,
mesh_show_back_face=False)
四:总结
本结主要介绍了Open3D操作常见点云和三角网格文件的函数及其用法。Open3D还支持其他格式的文件,待下一节与大家分享。