Python - 显示 3D 点云

Python - Display 3D Point Cloud

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

你能告诉我一个简单的 Python 库来绘制 3D 点云吗?

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

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

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

  1. 将 .ply 转换为 .pcd (ascii):pcl_ply2pcd input.ply output.pcd -format 0
  2. 使用 pypcd 这是一个 python 模块用于读取和写入 .pcd 文件
  3. Pypcd returns 一个 numpy ndarray 可以与 matplotlib
  4. 完美使用

如果您想留在 pcl 世界中,可以使用 python-pcl 包含库绑定的模块。

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

您可以使用 https://github.com/daavoo/pyntcloud 可视化 Jupyter notebook 中的 PLY:

from pyntcloud import PyntCloud

human_face = PyntCloud.from_file("human_face.ply")

human_face.plot()

对于任何想简单方法 读取和显示 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()

尝试pptk(点处理工具包)。该软件包有一个 3 维点云查看器,直接将 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 文件加载的点云。