前段时间在看文献 PointCloud Saliency Maps 时,跑相关代码,发现他数据集用的是h5文件的,与我接触的ply文件的数据集完全不同,然后在网上查找,发现并没有直接的方法实现,于是在了解了h5文件的格式之后,粗略的写了一个方法,仅供参考:
from plyfile import PlyData
import numpy as np
max_len = 3000000 # 点云中点的最大个数
import h5py
import numpy as np
# ply文件存放的位置
dir = "D:/备份/PointCloud-Saliency-Maps-master/pointnet-master/data/test0/Ply/"
file_list=[] # 保存所有文件名
cls=[] #类别
clas=[]
# Count.txt 文件存放的是每个点云文件的文件名
with open('pointnet-master/data/test0/Count.txt','r') as f:
f = open('pointnet-master/data/test0/Count.txt','r')
lines = f.readlines()
for line in lines:
line = line.strip()
file_list.append(line)
tokens = line.split('_')[0] # longdress_vox10_1051.ply 一个文件名的格式
cls.append(tokens)
for i in cls:
if i=="longdress":
clas.append('0')
elif i=="loot":
clas.append('1')
elif i=="redandblack":
clas.append('2')
else:
clas.append('3')
len = len(file_list)
list = []
data1 = np.zeros((len,max_len,3))
for file in file_list:
l = dir + file
list.append(l)
for index,path in enumerate(list):
with open(path,"rb") as f:
plydata = PlyData.read(f)
len1 = plydata['vertex'].data.shape[0]
for j in range(len1):
data1[index][j][0] = plydata['vertex'].data[j][0]
data1[index][j][1] = plydata['vertex'].data[j][1]
data1[index][j][2] = plydata['vertex'].data[j][2]
f = h5py.File("ply_data_test0.h5","w")
d1 = f.create_dataset("data",data=data1)
d1 = f.create_dataset("label",data=clas)
f.close()
这里只是将点的坐标,和点云的类别保存下来了,至于法向量以及颜色信息就没有过多研究了。
h5文件的查看方式:可以使用这个软件HDFView