当前位置:   article > 正文

使用open3d加载点云数据工具类_c# open3d

c# open3d

 设计思路:

点云文件加载成tensor类型,用于PointNet进行处理。

将tensor类型的点云文件保存到指定的位置

点云数据可视化

 类似于ply类型的点云文件,使用open3d读入之后,类型为pointcloud类型,需要转换成tensor类型进行网络处理。

工具类代码如下:

  1. import open3d as o3d
  2. import torch
  3. import numpy
  4. class oneFileUtils:
  5. # 加载单个文件
  6. # 不需要指定文件格式 支持自动识别 ply pcd xyz pts 等格式
  7. @staticmethod
  8. def loadFile(fileName):
  9. file = o3d.io.read_point_cloud(fileName)
  10. return torch.tensor(numpy.array(file.points))
  11. #保存单个文件
  12. @staticmethod
  13. def save(filePath,point_cloud):
  14. if(torch.is_tensor(point_cloud)):
  15. ply = oneFileUtils.toPoint_cloud(point_cloud)
  16. o3d.io.write_point_cloud(filePath, pointcloud=ply, write_ascii=True)
  17. return True
  18. return False
  19. @staticmethod
  20. # 将tensor数据转换成pointcloud类型
  21. def toPoint_cloud(point_cloud):
  22. point_cloud = point_cloud.numpy()
  23. ply = o3d.geometry.PointCloud()
  24. ply.points = o3d.utility.Vector3dVector(point_cloud)
  25. return ply
  26. # 将单个文件可视化
  27. @staticmethod
  28. def visualPointCloud(point_cloud):
  29. if(torch.is_tensor(point_cloud)):
  30. ply = oneFileUtils.toPoint_cloud(point_cloud)
  31. o3d.visualization.draw_geometries([ply])

 在测试类中进行测试

  1. import torch
  2. import warnings
  3. import open3d
  4. from Model_PCRNet.data_utils.OneFileUtils import oneFileUtils
  5. warnings.filterwarnings("ignore")
  6. file_dir = '../data/bun047.ply' # 文件的路径
  7. # 加载数据
  8. pointcloud = oneFileUtils.loadFile(file_dir)
  9. print(type(pointcloud))
  10. oneFileUtils.visualPointCloud(pointcloud)
  11. file_dir_2 = "../data/bun047.ply"
  12. if(oneFileUtils.save(file_dir_2,point_cloud=pointcloud)):
  13. oneFileUtils.visualPointCloud(oneFileUtils.loadFile(file_dir_2))

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/95608
推荐阅读
  

闽ICP备14008679号