Open3d:如何在窗口运行期间更新点云?

MAS*_*ODE 5 python image-processing 3d-reconstruction open3d

语境

我正在尝试从视差图可视化 3d 点云。它与一张地图完美配合。

问题

我想更新窗口中的内容。当我调用 run() 方法时,新线程将打开,在窗口关闭之前我无法执行任何操作。我想清除窗口中的内容并显示新的云而不关闭窗口,所以它会像动画一样。

代码

我已经创建了 Visualizer 对象,并在此基础上完成了所有操作。

    vis = open3d.visualization.Visualizer()
    vis.create_window()
    cloud = open3d.io.read_point_cloud(out_fn) # out_fn is file name
    vis.add_geometry(cloud)
    vis.run()
Run Code Online (Sandbox Code Playgroud)

小智 5

open3d.visualization.Visualizer 类具有 .update_geometry() 和 .remove_geometry() 函数,您可以使用它来实现此目的。您可以尝试的另一种方法是使用 open3d.visualization.VisualizerWithKeyCallback 类。

vis = o3d.visualization.VisualizerWithKeyCallback()
cloud = open3d.io.read_point_cloud(out_fn)
vis.create_window()
vis.register_key_callback(key, your_update_function)
vis.add_geometry(cloud)
vis.run()

def your_update_function():
    #Your update routine
    vis.update_geometry(cloud)
    vis.update_renderer()
    vis.poll_events()
    vis.run()
Run Code Online (Sandbox Code Playgroud)