Open3d: как обновить облако точек во время работы окна?

#python #image-processing #3d-reconstruction #open3d

#python #обработка изображений #3d-реконструкция #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()
 

Ответ №1:

Класс open3d.visualization.Визуализатор имеет функции .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()