我有 2 个不同的点云存储在 2 个不同的 numpy 数组中,我可以将它们组合在 open3d 中进行可视化。但我想要做的是一个点云保持不变,另一个点云在 z 方向移动(即更新 numpy 数组的坐标)而不关闭窗口。
下面是我传递这两个 numpy 数组(npa 和 npa_test)以在 open3d 中可视化的代码。请注意,在最初的行中,我将 numpy 数组存储到 .pcd 文件中(因为它们是从 open3d 无法识别的不同类型的文件 .asc 中提取的),然后使用 open3d 读取函数读取它们。我想通过在 z 方向上移动它来更新一个点云几何,然后在同一个窗口上可视化它而不关闭它。这可以通过在 for 循环中将 z 坐标更新 1 来完成,如下所述。如果您对此有解决方案,请告诉我。谢谢你。
def 绘制(npa,npa_test):
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(npa)
o3d.io.write_point_cloud("C:/Users/Junaid/Desktop/test.ply", pcd)
pcd_load = o3d.io.read_point_cloud("C:/Users/Junaid/Desktop/test.ply")
pcd1 = o3d.geometry.PointCloud()
pcd1.points = o3d.utility.Vector3dVector(npa_test)
o3d.io.write_point_cloud("C:/Users/Junaid/Desktop/test1.ply", pcd1)
pcd_load1 = o3d.io.read_point_cloud("C:/Users/Junaid/Desktop/test1.ply")
o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Debug)
vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd_load)
vis.add_geometry(pcd_load1)
npa.tolist()
for i in range(len(npa)):
npa[i][2] = npa[i][2] + 1
npa=np.asarray(npa, dtype=np.float32)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(npa)
o3d.io.write_point_cloud("C:/Users/Junaid/Desktop/test.ply", pcd)
pcd_load = o3d.io.read_point_cloud("C:/Users/Junaid/Desktop/test.ply")
vis.update_geometry(pcd_load)
vis.poll_events()
vis.update_renderer()
vis.destroy_window()