Python - 显示3D点云

29

我有一个包含3D点云的.PLY文件:我想在Python中绘制和可视化它。

你能告诉我一个简单的Python库,可以负责绘制这个三维点云吗?

需要注意的是,我不想绘制网格,只是点云。

4个回答

42
对于任何想要在Python中以简单方式读取和显示PLY点云的人,我回答自己的问题并报告了我在这种情况下发现的最佳解决方案。
打开命令提示符并输入:
pip install open3d

这将在您的计算机上安装Open3D,然后您就可以通过执行以下示例脚本来读取和显示您的PLY点云。
from open3d import *    

def main():
    cloud = io.read_point_cloud("output.ply") # Read point cloud
    visualization.draw_geometries([cloud])    # Visualize point cloud      

if __name__ == "__main__":
    main()

4
一些Linux用户可能需要使用命令pip install open3d-python来安装open3d。 - Keir
目前 Open3D 仍然缺乏许多工具,如点云查看器。 - Tom Hanks
1
它对我不起作用。"draw_geometries"不存在。 - BarzanHayati
同样不适用于苹果M1。 - old-ufo
现在应该这样写:cloud = io.read_point_cloud("cloud.ply") - ferdymercury
显示剩余2条评论

15
尝试使用pptk(点处理工具包)。该软件包具有一个3D点云查看器,直接以3列numpy数组作为输入,并能够交互式地可视化1000万到1亿个点。它通过使用八叉树来剔除视锥体外的点并将远离的点组近似为单个点,从而减少了每帧需要渲染的点数。
安装方法如下:
>> pip install pptk

使用Python可视化100个随机生成的点,

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

PPTK查看器展示100个随机点的截图

文档网站还有一个教程,专门介绍如何可视化从.ply文件加载的点云。


2
我正在搜索pptk文档,但无法找到任何实用程序,可以让我在同一可视化器中动态添加和删除PLY。您知道是否可能这样做吗?我正在尝试创建一个动态PLY可视化器:给定N个PLY文件,每个文件都必须依次显示在可视化器中。 - Employee
3
假设您已经将PLY文件加载到名为“X”的列表中,那么这样的代码是否可行: for x in X: v = pptk.viewer(x); v.wait(); v.close()?不幸的是,这会在新的Viewer中打开每个点云。如果要在同一Viewer中加载新的点云,则需要使用viewer.load,但它目前似乎存在故障:( - victoriousluser
3
无法在MacOS 10.13.6、Python 3.7.2上安装。 - Ray
7
调用pptk.viewer(P)未返回 :-( - user1953366
无法在我的虚拟机上运行。 - TripleS
显示剩余4条评论

7
你可以使用https://github.com/daavoo/pyntcloud在Jupyter笔记本中可视化PLY:
from pyntcloud import PyntCloud

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

human_face.plot()

1
你能分享一下PLY文件吗? - David de la Iglesia

0

您可以使用vtk,它具有python绑定,用于显示。 代码片段

如果您想使用numpy等处理数据,我建议按照以下步骤进行:

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

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

如果其中任何一项符合您的需求,我可以进一步详细说明。


你好,按照您建议的做法会出现以下错误: "('Saving point cloud to', 'out.pcd') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "convertcloud/converter.py", line 74, in convert header = self._generate_header(extension) File "convertcloud/converter.py", line 102, in _generate_header header = header_gen.pcd() File "convertcloud/formats.py", line 401, in pcd typ += types[field.type] + " " KeyError: u'uchar'"。 - Employee
请问您能否说明如何将带有X、Y、Z-R、G、B信息的PLY文件转换为相应的PCD文件?非常感谢您的帮助。提前致谢。 - Employee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接