我有两个不同的点云存储在两个不同的numpy阵列中,我可以在open3d中将它们组合起来。但我想做的是,一个点云保持不变,另一个点云在不关闭窗口的情况下沿z方向移动(即更新numpy数组的坐标)
下面是我通过这两个numpy数组(npa和npa_测试)在open3d中可视化的代码。请注意,在初始行中,我将numpy数组存储到.pcd文件中(因为它们是从open3d无法识别的不同类型的文件.asc中提取的),然后使用open3d读取功能读取它们。我想通过沿z方向移动一点云几何体来更新它,然后在同一窗口上可视化它,而不关闭它。这可以通过如下所述,将z cordinates更新1 in for循环来实现。请让我知道,如果你有关于这个问题的解决方案。多谢各位
def抽取(npa、npa_测试):
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()
我看到您正在使用
npa[i][2] = npa[i][2] + 1
来修改值,而当您可以只使用Transformation Matrix来转换像pcd.transform(np.array([[1,0,0,0],[0,1,0,0],[0,0,1,z_val],[0,0,0,1]]))
这样的几何体时,这是一个过度的操作下面是使用open3d将球体从z=0.5移动到15.0,增量为0.005的简单解决方案
相关问题 更多 >
编程相关推荐