赞
踩
设计思路:
将点云文件加载成tensor类型,用于PointNet进行处理。
将tensor类型的点云文件保存到指定的位置
将点云数据可视化
类似于ply类型的点云文件,使用open3d读入之后,类型为pointcloud类型,需要转换成tensor类型进行网络处理。
工具类代码如下:
- import open3d as o3d
- import torch
- import numpy
-
-
- class oneFileUtils:
-
- # 加载单个文件
- # 不需要指定文件格式 支持自动识别 ply pcd xyz pts 等格式
- @staticmethod
- def loadFile(fileName):
- file = o3d.io.read_point_cloud(fileName)
- return torch.tensor(numpy.array(file.points))
-
-
- #保存单个文件
- @staticmethod
- def save(filePath,point_cloud):
-
- if(torch.is_tensor(point_cloud)):
- ply = oneFileUtils.toPoint_cloud(point_cloud)
- o3d.io.write_point_cloud(filePath, pointcloud=ply, write_ascii=True)
- return True
- return False
-
- @staticmethod
- # 将tensor数据转换成pointcloud类型
- def toPoint_cloud(point_cloud):
- point_cloud = point_cloud.numpy()
- ply = o3d.geometry.PointCloud()
- ply.points = o3d.utility.Vector3dVector(point_cloud)
- return ply
-
- # 将单个文件可视化
- @staticmethod
- def visualPointCloud(point_cloud):
- if(torch.is_tensor(point_cloud)):
- ply = oneFileUtils.toPoint_cloud(point_cloud)
- o3d.visualization.draw_geometries([ply])
在测试类中进行测试
- import torch
- import warnings
- import open3d
- from Model_PCRNet.data_utils.OneFileUtils import oneFileUtils
-
- warnings.filterwarnings("ignore")
- file_dir = '../data/bun047.ply' # 文件的路径
-
- # 加载数据
- pointcloud = oneFileUtils.loadFile(file_dir)
- print(type(pointcloud))
- oneFileUtils.visualPointCloud(pointcloud)
- file_dir_2 = "../data/bun047.ply"
- if(oneFileUtils.save(file_dir_2,point_cloud=pointcloud)):
- oneFileUtils.visualPointCloud(oneFileUtils.loadFile(file_dir_2))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。