设计思路:
将点云文件加载成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))
该博客介绍了一个Python工具类,用于处理点云数据。工具类包括加载不同格式的点云文件(如ply)到tensor,将其保存为ply文件,以及将点云数据进行可视化。通过使用Open3D库,可以将tensor类型的点云转换为pointcloud类型,便于网络处理和可视化。在测试类中,展示了加载、保存和显示点云文件的功能。

6516

被折叠的 条评论
为什么被折叠?



