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

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

      • 一、读取
          • 1.1 点云读取
          • **1.2 图像读取**
          • 1.3 网格读取
      • 二、保存
          • 2.1 点云保存
          • **2.2 图像保存**
          • 2.3 mesh保存
      • 三、显示
          • 3.1 点云显示
          • 3.2 图像显示
          • 3.3 mesh显示
      • 四、结果展示
      • 五、点云数据获取

一、读取

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,idouble类型,r,g,bunint8类型
    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文件展示

open3d 点云、图像、网格的读取、保存、显示_第1张图片
png图像展示
open3d 点云、图像、网格的读取、保存、显示_第2张图片
obj文件显示
open3d 点云、图像、网格的读取、保存、显示_第3张图片

等。。。

五、点云数据获取

包括 obj,pcd,las,png,ply

百度网盘链接:https://pan.baidu.com/s/1JFxKUk_xMcEmpfBHtuC-Pg
提取码:cpev

你可能感兴趣的:(open3d持续更新,python,计算机视觉,3d)