Open3d - 将多个点云可视化为视频/动画

Posted

技术标签:

【中文标题】Open3d - 将多个点云可视化为视频/动画【英文标题】:Open3d - visualizing multiple point clouds as a video/animation 【发布时间】:2020-07-15 10:03:25 【问题描述】:

我使用 RGB+深度视频生成了多个点云,并希望将多个点云可视化为视频或动画。

目前我使用的是Python,部分代码如下:

for i in range(1,10)
       pcd = Track.create_pcd(i)
       o3d.visualization.draw_geometries([pcd])
       pcd_list.append(pcd)

当我使用 draw_geometries 或 draw_geometries_with_animation_callback 时,它们似乎无法显示点云列表:

o3d.visualization.draw_geometries([pcd_list])

def rotate_view(vis):
    ctr = vis.get_view_control()
    ctr.rotate(10.0, 0.0)
    return False
    
o3d.visualization.draw_geometries_with_animation_callback([pcd_list],rotate_view)

它给出了以下错误:

TypeError: draw_geometries(): 不兼容的函数参数。这 支持以下参数类型:

    (geometry_list: List[open3d.open3d_pybind.geometry.Geometry], window_name: str = ‘Open3D’, width: int = 1920, height: int = 1080, 左:int = 50,顶部:int = 50,point_show_normal:bool = False, mesh_show_wireframe: bool = False, mesh_show_back_face: bool = False) -> 无

是否有任何示例如何将点云列表导出到视频中,例如设置查看器,并以0.5秒的waitkey显示每个点云,然后保存为视频文件(.mp4/.avi) ? 还要获取并设置视频中点云的固定视点?

非常感谢!

【问题讨论】:

【参考方案1】:

您可以使用 Open3D Non-blocking visualization。

会是这样的

vis = o3d.visualization.Visualizer()
vis.create_window()

# geometry is the point cloud used in your animaiton
geometry = o3d.geometry.PointCloud()
vis.add_geometry(geometry)

for i in range(icp_iteration):
    # now modify the points of your geometry
    # you can use whatever method suits you best, this is just an example
    geometry.points = pcd_list[i].points
    vis.update_geometry(geometry)
    vis.poll_events()
    vis.update_renderer()

【讨论】:

是的,这些天我在尝试并且有类似的方法。但是你能从 json 文件中设置可视化器的视点吗?我目前对可视化器的问题是它无法从 .json 文件加载视点。我可以成功地将点云的视点(作为良好可视化的方向)保存为 .json 格式(使用“Printscreen”按钮)。但是当我使用vis.get_render_option().load_from_json("ScreenCamera_2020-07-16-20-57-15.json") 时,它会输出:[Open3D WARNING] ViewTrajectory read JSON failed: unsupported json format. 我对 json 文件的快速测试没有成功。目前我没有太多时间玩这个。但是恕我直言,相机视点设置可以通过反转点云来规避。这有点不合时宜,但似乎当前的 Open3D 版本仍然包含很多错误(我什至无法成功完成一些官方示例 :) 我的意思是逆变换点云(使用相机位姿的逆矩阵变换点云),而不是逆变换(我不知道'甚至不知道它是什么),我的错。 当我使用此代码时,窗口对我来说仍然是空的? 遇到与@aviator 相同的问题。窗口是空白的,然后当我开始按下按钮时,窗口会挂起。

以上是关于Open3d - 将多个点云可视化为视频/动画的主要内容,如果未能解决你的问题,请参考以下文章

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

python如何实现点云可视化交互——Open3D实例教程(获取所选点的信息)保姆级教学

点云处理技术之open3d第一篇:open3d的快速安装简介文件的读写和可视化操作

点云处理技术之open3d第二篇:点云的基本操作篇——可视化降采样法向量裁剪和绘制点云

使用open3d和matplotlib可视化三维点云

Open3D官方文档学习笔记