• open3d使用总结


        基于python版的pcl库---open3d,下面对其使用进行简单总结:

    一、安装

    pip install open3d

    二、简单使用

    open3d支持如下点云文件类型

    FormatDescription
    xyz每行包含[x, y, z], 其中 xyz 分别是三维坐标
    xyzn每行包含[x, y, z, nx, ny, nz], 其中 nxnynz 是法向量
    xyzrgb每行包含 [x, y, z, r, g, b], 其中rgb 是[0, 1]的float数据
    pts第一行是点数. 接下来的行遵循如下其中一种格式:[x, y, z, i, r, g, b][x, y, z, r, g, b][x, y, z, i] or [x, y, z], 其中xyzi 是 double类型 ,rgb 是 uint8类型
    ply见 多边形格式, ply文件可以包含点云和mesh网格数据
    pcd

    见 点云数据

    //可直接打开pcd,ply文件

    source = o3.io.read_point_cloud('bunny.pcd')
    //保存pcdt文件

    o3.io.write_point_cloud("C:\\Users\\1\\Desktop\\配准数据\\result(cpd).pcd",result)

    txt

     //打开txt文件
     source = o3.io.read_point_cloud('C:\\Users\\1\\Desktop\\配准数据\\source.txt',format="xyz")
     target = o3.io.read_point_cloud('C:\\Users\\1\\Desktop\\配准数据\\target.txt',format="xyz")
     
    //或者
     source = o3.geometry.PointCloud()
     m1 = np.loadtxt('C:\\Users\\1\\Desktop\\配准数据\\source.txt')[:, 0:3]
     source.points = o3.utility.Vector3dVector(m1)

    //保存为txt文件
    np.savetxt('C:\\Users\\1\\Desktop\\配准数据\\result(cpd).txt', result.points, fmt="%f", delimiter=" ")
    “”“
    data/task.txt:参数为文件路径以及TXT文本名
    self.task: 为要保存的数组名
    fmt="%d": 为指定保存的文件格式,这里为十进制
    delimiter=" "表示分隔符,这里以空格的形式隔开
    ”“”

    (1)点云读取

    read_point_cloud(filename, format='auto', remove_nan_points=True, remove_infinite_points=True, print_progress=False): 

    参数:

    filename (str): 点云文件路径
    format (str, optional, default='auto'): 输入文件格式filehe的路径。 如果未指定或设置为“auto”,则从文件扩展名推断格式 
    remove_nan_points (bool, optional, default=False): 如果True,所有包含NaN的点都将从PointCloud中删除。 
    remove_infinite_points (bool, optional, default=False): 如果为True,所有包含无限值的点都将从PointCloud中删除 
    print_progress (bool, optional, default=False): 如果设置为true,控制台中会显示一个进度条 
    返回:

    open3d.geometry.PointCloud
    默认情况下,Open3D尝试通过文件名扩展名推断文件类型,默认读取的是xyz维度信息。

    pcd = o3d.io.read_point_cloud("../../test_data/my_points.txt", format='xyz')
    也可以显式地指定文件类型。 在这种情况下,文件扩展名将被忽略。

    (2)点云写入

    write_point_cloud(filename, pointcloud, write_ascii=False, compressed=False, print_progress=False)

    参数:

       filename (str): 点云文件保存路径名.
       pointcloud (open3d.geometry.PointCloud): 目标点云
        compressed (bool, optional, default=False): 设置为' ' True ' '以压缩格式写入。 
        print_progress (bool, optional, default=False):如果设置为true,控制台中会显示一个进度条 
    返回:bool类型
    保存一个点云(o3d.pcd)到本地文件

    (3)点云显示

    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):

    参数:

    geometry_list (List[open3d.geometry.Geometry]): 可视化点云列表。
    window_name (str, optional, default='Open3D'): 可视化窗口名称。
    width (int, optional, default=1920): 可视化窗口宽
    height (int, optional, default=1080): 可视化窗口高
    left (int, optional, default=50): 可视化窗口左边距
    top (int, optional, default=50): 可视化窗口上边距
    point_show_normal (bool, optional, default=False):  如果设置为True,可视化点的法向量。
    mesh_show_wireframe (bool, optional, default=False): 如果设置为true,可视化网格线框。
    mesh_show_back_face (bool, optional, default=False): 可视化网格三角形背面。
    返回:

    None

    还有一些特殊场景可能需要自定义可视化,具体可以参考tutorial:Customized visualization — Open3D 0.15.1 documentation

    ​(4)示例

    1. import open3d as o3d
    2. import numpy as np
    3.  
    4. print("Load a ply point cloud, print it, and render it")
    5. # ply_point_cloud = o3d.data.PLYPointCloud()
    6. plyname = r'fragment.ply'
    7. #读点云
    8. pcd = o3d.io.read_point_cloud(plyname)
    9. print(pcd)
    10. print(np.asarray(pcd.points))
    11. #点云显示
    12. o3d.visualization.draw_geometries([pcd],
    13.                                   zoom=0.3412,
    14.                                   front=[0.4257, -0.2125, -0.8795],
    15.                                   lookat=[2.6172, 2.0475, 1.532],
    16.                                   up=[-0.0694, -0.9768, 0.2024])
    17. #保存点云
    18. o3d.io.write_point_cloud("save.pcd", pcd)

    参考链接:

    1、Basic — Open3D 0.9.0 documentation

    2、open3d-点云读写和显示_月亮299的博客-CSDN博客

    3、​​​​​​爆肝5万字❤️Open3D 点云数据处理基础(Python版)_孙 悟 空的博客-CSDN博客_open3d教程

  • 相关阅读:
    FreeRTOS 任务调度和任务的状态
    1.2继承性
    7 行代码搞崩溃 B 站,原因令人唏嘘!
    深度学习中文汉字识别 计算机竞赛
    【干货分享】2022软件测试面试题汇总
    JavaScript基础
    微服务中配置文件(YAML文件)和项目依赖(POM文件)的区别与联系
    格式化的u盘怎么恢复数据?
    第七章《Java的异常处理》第2节:异常的分类及处理方法
    2022最新版-李宏毅机器学习深度学习课程-P26RNN-2
  • 原文地址:https://blog.csdn.net/xiaomu_347/article/details/125599355