open3d 点云、图像、网格的读取、保存、显示
一、读取
1.1 点云读取
pcd = o3d.io.read_point_cloud('点云文件路径', format='auto', remove_nan_points=True, remove_infinite_points=True, print_progress=False)
返回类型
<class 'open3d.cpu.pybind.geometry.PointCloud'>
输出点云个数
print(pcd)
以下是该函数的参数介绍(大部分用不上, 红色使用):
-
filename (str):要读取的点云文件的路径。
-
format (str, optional):要读取的文件的格式。默认为
None
,此时 Open3D 将根据文件的扩展名自动确定文件格式。支持的格式包括'auto'
,'xyz'
,'xyzn'
,'pts'
,'ptx'
,'ply'
,'pcd'
,'xyzrgb'
,'xyznrgb'
,'xyzbgr'
,'xyzrgb+'
,'vtp'
,'vtu'
,'obj'
,'gltf'
等。如果指定了格式,Open3D 将尝试以指定的格式读取文件,而不是根据扩展名自动确定。 -
remove_nan_points (bool, optional):是否删除包含 NaN(Not a Number)值的点。默认为
True
,即删除包含 NaN 值的点。(补充:在点云中,NAN(Not a Number)表示一个无效的数字或值,通常是由于数据输入错误、计算错误或其他问题导致的。NAN点可能表示一个不存在的点、一个超出点云范围的点、一个无效的坐标值等。)
-
remove_infinite_points (bool, optional):是否删除包含无穷值的点。默认为
True
,即删除包含无穷值的点。 -
print_progress (bool, optional):是否打印读取进度信息。默认为
False
,不打印。点云数据支持类型
格式 描述 xyz
每一行包含 [x,y,z]
,其中x,y,z
是三维坐标xyzn
每一行包含 [x,y,z,nx,ny,nz]
,其中x,y,z
是三维坐标,nx,ny,nz
是法向量xyzrgb
每一行包含 [x,y,z,r,g,b]
,其中x,y,z
是三维坐标,r,g,b
是颜色信息,取值范围是[0,1]
pts
第一行是表示点数的整数。随后的行遵循以下一种格式: [x,y,z,i,r,g,b],[x,y,z,r,g,b],[x,y,z,i]或[x,y,z],
,其中x,y,z,i
是double
类型,r,g,b
是unint8
类型ply
见:多边形文件格式, ply
文件可同时包含点云和网格数据pcd
见:点云数据
1.2 图像读取
images = o3d.io.read_image('图像路径')
返回类型
<class 'open3d.cpu.pybind.geometry.Image'>
图像信息
print(images)
以下是该函数的参数介绍(大部分用不上, 红色使用):
- filename (str):要读取的图像文件的路径。
- dtype (numpy.dtype, optional):图像数据的数据类型。默认为
numpy.uint8
。 - num_channels (int, optional):图像的通道数。默认为 3。
- print_progress (bool, optional):是否打印读取进度信息。默认为
False
,即不打印。
图像数据支持类型
Open3D 支持使用 OpenCV (cv2
) 和 Pillow (PIL
) 两种库来读取图像文件。因此,支持的图像类型包括但不限于:
JPEG (.jpg, .jpeg)、PNG (.png)、BMP (.bmp)等。如果安装了适当的依赖库(OpenCV 或 Pillow),o3d.io.read_image
应该能够读取大多数常见的图像格式。
1.3 网格读取
网格读取条件
- 当文件中包含描述物体表面拓扑结构的数据时,如三角面片和顶点法线等信息,通常将其视为网格文件。常见的网格文件格式包括 OBJ、PLY、STL 等。
- 使用
open3d.io.read_triangle_mesh()
函数读取网格文件。
mesh = o3d.io.read_triangle_mesh()
以下是该函数的参数介绍(大部分用不上, 红色使用):
-
filename:要读取的文件的路径。
-
format
(optional):文件格式。默认为自动检测。可以是以下值之一:
"auto"
:自动检测文件格式。"ply"
:PLY 格式。"obj"
:OBJ 格式。"stl"
:STL 格式。"off"
:OFF 格式。"xyz"
:XYZ 格式。
-
remove_duplicated_vertices (optional):如果为
True
,则在读取网格时删除重复的顶点。默认为True
。 -
remove_duplicated_triangles (optional):如果为
True
,则在读取网格时删除重复的三角形。默认为True
。 -
remove_non_manifold_edges (optional):如果为
True
,则在读取网格时删除非流形边。默认为True
。
点云数量和三角网格数量
print(mesh)
点云返回类型
<class 'open3d.cpu.pybind.geometry.TriangleMesh'>
二、保存
2.1 点云保存
o3d.io.write_point_cloud('保存文件路径', '点云数据', write_ascii=False, compressed=False, print_progress=False)
以下是该函数的参数介绍(大部分用不上, 红色使用):
- filename (str):要写入的点云文件的路径。
- pointcloud (
open3d.geometry.PointCloud
):要写入的点云对象。 - write_ascii (bool, optional):是否以 ASCII 格式写入文件。默认为
False
,即以二进制格式写入文件。 - compressed (bool, optional):是否使用压缩格式写入文件。默认为
False
,即不使用压缩。 - print_progress (bool, optional):是否打印写入进度信息。默认为
False
,不打印。
2.2 图像保存
o3d.io.write_image('保存路径', 图像)
以下是该函数的参数介绍(大部分用不上, 红色使用):
- filename (str): 要写入的图像文件的路径和名称。
- image (numpy.ndarray): 要写入的图像数据,通常是一个三维的 NumPy 数组。对于彩色图像,形状应为 (height, width, 3),表示高度、宽度和通道数。对于灰度图像,形状应为 (height, width)。
- quality (int, optional): 图像质量参数,仅适用于某些格式(例如 JPEG)。范围通常从 0 到 100,其中 100 表示最高质量。默认为 95。
- progressive (bool, optional): 是否启用渐进式加载,仅适用于某些格式(例如 JPEG)。默认为 False。
- compression_level (int, optional): 压缩级别,仅适用于某些格式(例如 PNG)。较低的级别通常会导致更高的压缩率,但可能会降低图像质量。默认为 6。
- format (str, optional): 要使用的图像格式。如果未指定,Open3D 将根据文件扩展名自动确定格式。目前支持的格式包括 ‘PNG’, ‘JPEG’, ‘BMP’, ‘GIF’, ‘TIFF’, ‘PPM’ 和 ‘PGM’。
2.3 mesh保存
o3d.io.write_triangle_mesh("mesh路径”, mesh数据)
以下是该函数的参数介绍(大部分用不上, 红色使用):
- filename:要保存的文件的路径。
- mesh:要保存的网格对象,类型为
open3d.geometry.TriangleMesh
。 - write_ascii (optional):如果为
True
,则以 ASCII 格式写入文件。默认为False
,以二进制格式写入文件。
三、显示
3.1 点云显示
o3d.visualization.draw_geometries(['点云数据', '第二个点云数据', '...'],window_name='Open3D界面', width=1920, height=1080, left=50, top=50, point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face, *args, **kwargs)
以下是该函数的参数介绍(大部分用不上, 红色使用居多):
geometries
:必需参数,要可视化的几何对象列表(点云数据)。window_name
:窗口的名称,可选参数,默认为 “Open3D”。width
:窗口的宽度,可选参数,默认为 1920 像素。height
:窗口的高度,可选参数,默认为 1080 像素。left
:窗口在屏幕上的左侧位置,可选参数,默认为 50。top
:窗口在屏幕上的顶部位置,可选参数,默认为 50。point_show_normal
:是否显示点云法向量,可选参数,默认为 False。mesh_show_wireframe
:是否以线框模式显示网格,可选参数,默认为 False。mesh_show_back_face
:是否显示网格的背面,可选参数,默认为 True。lookat
:相机观察的目标点,可选参数,默认为 [0, 0, 0]。up
:相机的上方向,可选参数,默认为 [0, 0, 1]。field_of_view
:相机的视场角,可选参数,默认为 60。zoom
:相机的缩放级别,可选参数,默认为 0.8。front
:相机到近裁剪平面的距离,可选参数,默认为 0.1。back
:相机到远裁剪平面的距离,可选参数,默认为 10000。view_control
:设置视图控制器,可选参数,默认为 None。bg_color
:背景颜色,可选参数,默认为黑色 [0, 0, 0]。return_images
:是否返回渲染的图像,可选参数,默认为 False。
3.2 图像显示
同点云显示一样滴!
3.3 mesh显示
同点云显示一样滴!
四、结果展示
pcd文件展示
png图像展示
obj文件显示
等。。。
五、点云数据获取
包括 obj
,pcd
,las
,png
,ply
百度网盘链接:https://pan.baidu.com/s/1JFxKUk_xMcEmpfBHtuC-Pg
提取码:cpev