【问题标题】:Python - Display 3D Point Cloud [closed]Python - 显示 3D 点云 [关闭]
【发布时间】:2018-11-30 14:49:00
【问题描述】:

我有一个包含 3D 点云的 .PLY 文件:我想绘制它并在 Python 中可视化它。 .PLY 文件只包含顶点而不包含面。

能否告诉我一个用于绘制 3D 点云的简单 Python 库?

重要的是要注意我对绘制网格不感兴趣,而只是绘制点云。

【问题讨论】:

    标签: python 3d point-cloud-library point-clouds ply


    【解决方案1】:

    您可以使用具有 python 绑定的 vtk 来只是显示。 Code snippet

    如果你想用 numpy 等处理你的数据,我推荐以下步骤:

    1. 将 .ply 转换为 .pcd (ascii):pcl_ply2pcd input.ply output.pcd -format 0
    2. 使用 pypcd 这是一个用于读写 .pcd 文件的 python 模块
    3. Pypcd 返回一个 numpy ndarray,可以完美地与 ma​​tplotlib 一起使用

    如果你想留在 pcl 世界,有一个 python-pcl 模块包含到库的绑定。

    如果其中一个符合您的需要,我可以进一步详细说明。

    【讨论】:

    • 您好,按照您的建议进行操作会导致以下错误:“('将点云保存到','out.pcd')回溯(最近调用最后一次):文件“”,第 1 行, 文件“convertcloud/converter.py”,第 74 行,convert header = self._generate_header(extension) 文件“convertcloud/converter.py”,第 102 行,_generate_header header = header_gen.pcd()文件“convertcloud/formats.py”,第 401 行,在 pcd typ += types[field.type] + "" KeyError: u'uchar'"
    • 您能否说明如何将标题中包含 X、Y、Z - R、G、B 信息的 PLY 文件转换为相应的 PCD 文件?任何帮助将不胜感激。提前谢谢你
    【解决方案2】:

    您可以使用 https://github.com/daavoo/pyntcloud 在 Jupyter 笔记本中可视化 PLY:

    from pyntcloud import PyntCloud
    
    human_face = PyntCloud.from_file("human_face.ply")
    
    human_face.plot()
    

    【讨论】:

    • 你能分享 PLY 文件吗??
    【解决方案3】:

    对于任何想了解简单方法在 Python 中读取和显示 PLY 点云的人,我会回答我自己的问题,报告我发现的最佳解决方案我的情况。

    打开 cmd 并输入:

    pip install open3d
    

    这将在您的计算机上安装 Open3D,然后您只需执行以下示例脚本即可读取和显示您的 PLY 点云:

    import numpy as np
    from open3d import *    
    
    def main():
        cloud = read_point_cloud("cloud.ply") # Read the point cloud
        draw_geometries([cloud]) # Visualize the point cloud     
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • 部分 Linux 用户可能需要使用命令 pip install open3d-python 安装 open3d
    • Anaconda 用户打开 anaconda-prompt 并输入:conda install -c open3d-admin open3d
    • 目前 open3d 作为点云查看器仍然缺乏很多统一性
    • 它对我不起作用。 “draw_geometries”不存在
    • 也不适用于 Apple M1
    【解决方案4】:

    试试pptk(点处理工具包)。该软件包有一个 3-d 点云查看器,它直接将 3 列 numpy 数组作为输入,并且能够以交互方式可视化 10-1 亿个点。 (它通过使用八叉树来剔除视锥外的点并将远处的点组近似为单个点,从而减少了每帧中需要渲染的点数)

    要安装,

    >> pip install pptk
    

    要在 Python 中可视化 100 个随机生成的点,

    >> import pptk
    >> import numpy as np
    >> P = np.random.rand(100,3)
    >> v = pptk.viewer(P)
    

    screenshot of pptk viewer visualizing 100 random points

    文档网站还有一个tutorial,专门用于可视化从 .ply 文件加载的点云。

    【讨论】:

    • 我在 pptk 文档中搜索,但找不到任何实用程序可以让我在同一个可视化器中动态添加和删除 PLY。你知道是否有可能做到这一点?我正在尝试创建一个动态 PLY 可视化器:给定 N PLY 文件,每个文件都必须一个接一个地显示在可视化器中
    • @Employee 假设您将 PLY 文件加载到名为X 的列表中,这样的工作是否可行:for x in X: v = pptk.viewer(x); v.wait(); v.close()?不幸的是,这会在新查看器中打开每个点云。要在同一个查看器中加载新的点云,您需要使用 viewer.load,目前似乎有问题:(
    • 不安装在 MacOS 10.13.6、Python 3.7.2 上。
    • 调用 pptk.viewer(P) 永远不会返回 :-(
    • 不适用于我的虚拟盒子
    猜你喜欢
    • 2020-02-25
    • 2016-09-13
    • 1970-01-01
    • 2018-01-07
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多