• pclpy 可视化点云(多窗口可视化、单窗口多点云可视化)


    一、算法原理

    原理看一下代码写的很仔细的。。目前在同一个窗口最多建立2个窗口。
    数据可视化把点云的名字更改一下即可,就在一个窗口下可视化多个点云。

    二、代码

    from pclpy import pcl
    
    def multiCloudShow(cloud1, cloud2):
        """
        Args:多点云可视化在同一个窗口
            cloud1:  点云数据
            cloud2:  点云数据
        """
        viewer = pcl.visualization.PCLVisualizer("viewer")  # 建立可刷窗口对象 窗口名 viewer
        single_color = pcl.visualization.PointCloudColorHandlerCustom.PointXYZ(cloud1, 255.0, 0, 0.0)  # 将点云设置为红色
        viewer.addPointCloud(cloud1,  # 要添加到窗口的点云数据。
                             single_color,  # 指定点云的颜色
                             "sample cloud1",  # 添加的点云命名
                            )  # 点云添加到的视图
    
        single_color = pcl.visualization.PointCloudColorHandlerCustom.PointXYZ(cloud2, 0.0, 255.0, 0.0)  # 将点云设置为绿色
        viewer.addPointCloud(cloud2,  # 要添加到窗口的点云数据。
                             single_color,  # 指定点云的颜色
                             "sample cloud2",  # 添加的点云命名
                             )  # 点云添加到的视图
    
        # 窗口建立
        while not viewer.wasStopped():
            viewer.spinOnce(10)
    
    def compareCloudShow(cloud1, cloud2):
        """
        Args:在一个窗口生成2个窗口可视化点云
            cloud1: 点云数据1
            cloud2: 点云数据2
        """
        viewer = pcl.visualization.PCLVisualizer("viewer")  # 建立可刷窗口对象 窗口名 viewer
        v0 = 1  # 设置标签名(0, 1标记第一个窗口)
        viewer.createViewPort(0.0, 0.0, 0.5, 1.0, v0)  # 创建一个可视化的窗口
        viewer.setBackgroundColor(0.0, 0.0, 0.0, v0)  # 设置窗口背景为黑色
        single_color = pcl.visualization.PointCloudColorHandlerCustom.PointXYZ(cloud1, 255.0, 0, 0.0)  # 将点云设置为红色
        viewer.addPointCloud(cloud1,          # 要添加到窗口的点云数据。
                             single_color,    # 指定点云的颜色
                             "sample cloud1",  # 添加的点云命名
                             v0)  # 点云添加到的视图
    
        v1 = 2  # 设置标签名(2代表第二个窗口)
        viewer.createViewPort(0.5, 0.0, 1.0, 1.0, v1)  # 创建一个可视化的窗口
        viewer.setBackgroundColor(255.0, 255.0, 255.0, v1)  # 设置窗口背景为白色
        single_color = pcl.visualization.PointCloudColorHandlerCustom.PointXYZ(cloud2, 0.0, 255.0, 0.0)  # 将点云设置为绿色
        viewer.addPointCloud(cloud2,  # 要添加到窗口的点云数据。
                             single_color,  # 指定点云的颜色
                             "sample cloud2",  # 添加的点云命名
                             v1)  # 点云添加到的视图
    
        # 设置点云窗口(可移除对点云可视化没有影响)
        viewer.setPointCloudRenderingProperties(0,  # 设置点云点的大小
                                                1,  # 点云像素
                                                "sample cloud1",  # 识别特定点云
                                                v0)  # 在那个窗口可视化
        viewer.setPointCloudRenderingProperties(0,  # 设置点云点的大小
                                                1,  # 点云像素
                                                "sample cloud2",  # 识别特定点云
                                                v1)  # 在那个窗口可视化
        viewer.addCoordinateSystem(1.0)  # 设置坐标轴 坐标轴的长度为1.0
        # 窗口建立
        while not viewer.wasStopped():
            viewer.spinOnce(10)
    
    
    if __name__ == '__main__':
        # 读取一个点云
        cloud1 = pcl.PointCloud.PointXYZ()
        reader = pcl.io.PCDReader()  # 设置读取对象
        reader.read('res/bunny.pcd', cloud1)  # 读取点云保存在cloud中
        # 读取一个点云
        cloud2 = pcl.PointCloud.PointXYZ()
        reader = pcl.io.PCDReader()  # 设置读取对象
        reader.read('res/table_scene_lms400.pcd', cloud2)  # 读取点云保存在cloud中
        multiCloudShow(cloud1, cloud2)  # 一个窗口可视化多个点云
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    三、结果

    1.多窗口可视化结果

    在这里插入图片描述

    2.单窗口多点云可视化

    在这里插入图片描述

    四、相关数据

    测试数据链接:https://pan.baidu.com/s/1am-4qlxuX_l6uoDeIbpPrA
    提取码:ffs2

    五、问题与解决方案

    1.问题

    在这里插入图片描述

    2.解决

    报错原因:添加到可视化窗口的的点云名重复

    解决:更改点云名在窗口的名即可

  • 相关阅读:
    java基础-第1章-走进java世界
    Day22:多态详解
    基本分段存储管理方式(分段,段表,地址转换以及与分页管理对比)
    axios.defaults.baseURL的三种配置方法
    自动驾驶系列(七)——聊聊人机交互中的DMS驾驶员监控系统
    Inter校企合作 淡水质量预测
    typescript57-数组泛型接口
    计算机网络 - 概述 选择填空复习题
    力扣第300题 最长递增子序列 c++ 动态规划题 附Java代码
    基于水循环优化的BP神经网络(分类应用) - 附代码
  • 原文地址:https://blog.csdn.net/m0_73126623/article/details/136222483