查看h5文件
import h5py
import numpy as np
# 申明句柄
f = h5py.File(
'modelnet40_ply_hdf5_2048/ply_data_train0.h5',
'r')
# 输出它的主键
print(f.keys()) # ['data', 'faceId', 'label', 'normal']
# 要打印出data的内容的话:
# print(f['data'][:])
# 要打印出data的形状的话:
print(f['data'][:].shape) # train0-3 (2048, 2048, 3) / train4 (1648, 2048, 3)
# test0 (2048, 2048, 3) / test1 (420, 2048, 3)
print(f['label'][:].shape) # (2048, 1)
print(f['faceId'][:].shape) # (2048, 2048)
print(f['normal'][:].shape) # (2048, 2048, 3)
# HDF5的读取:
f = h5py.File('HDF5_FILE.h5', 'r') # 打开h5文件
# 可以查看所有的主键
for key in f.keys():
print(f[key].name)
print(f[key].shape)
print(f[key].value)
查看pcd文件
import open3d as o3d
import numpy as np
path = '/home/cv/文档/datasets/modelnet40_pcd/all_test/test_0.pcd'
def read_pcd(file_path):
pcd = o3d.io.read_point_cloud(file_path)
points = np.asarray(pcd.points)
print(points)
print(points.shape)
read_pcd(path)
批量转pcd
import h5py
import numpy as np
import os
import math
from open3d import *
filename = 'modelnet40_ply_hdf5_2048/ply_data_test1.h5'
f = h5py.File(filename, 'r')
data = f['data']
label = f['label']
for i in range(2048):
print(i)
one_data = data[i:i+1, :, :] # (1, 2048, 3)
one_label = label[i:i+1] # (1, 1)
one_data = np.concatenate(one_data, axis=0) # (2048, 3)
one_label = np.concatenate(one_label, axis=0) # (1,)
data_shape = np.shape(one_data) # 2048,3
WIDTH = data_shape[0]
POINTS = WIDTH # 2048
path = 'datasets/modelnet40_pcd/all_test/test_'+ str(i+2048)+ '.pcd'
if os.path.exists(path):
os.remove(path)
out = open(path, 'a')
# headers
out.write(
'# .PCD v0.7 - Point Cloud Data file format\nVERSION 0.7\nFIELDS x y z\nSIZE 4 4 4\nTYPE F F F\nCOUNT 1 1 1')
string = '\nWIDTH ' + str(WIDTH)
out.write(string)
out.write('\nHEIGHT 1\nVIEWPOINT 0 0 -2 0 1 0 0')
string = '\nPOINTS ' + str(POINTS)
out.write(string)
out.write('\nDATA ascii')
# datas
for i in range(POINTS):
string = '\n' + str(one_data[i, 0]) + ' ' + str(one_data[i, 1]) + ' ' + str(one_data[i, 2])
out.write(string)
out.close()
批量转h5
# -*- coding: utf-8 -*-
import h5py
import numpy as np
from open3d import *
import open3d as o3d
def read_label():
filename = '/home/cv/PycharmProjects/PointCloud-Saliency-Maps/pointnet-master/data/' \
'modelnet40_ply_hdf5_2048/ply_data_test1.h5'
f = h5py.File(filename, 'r')
# data = f['data']
label = f['label'][:]
return label # (2048, 1)
def read_data():
data = np.zeros((420, 1024, 3))
for i in range(2048,2468):
path = '/home/cv/文档/datasets/modelnet40_pcd/all_test_1/test_' + str(i) + '.pcd'
pcd = o3d.io.read_point_cloud(path)
points = np.asarray(pcd.points) # (1024,3)
data[i-2048] = points
return data # (2048,1024,3)
def wh5():
data = read_data()
label = read_label()
f = h5py.File('/home/cv/PycharmProjects/PointCloud-Saliency-Maps/pointnet-master/'
'data/modelnet40_ply_hdf5_1024/ply_data_test1.h5', 'w') # 创建一个h5文件,文件指针是f
f['data'] = data # 将数据写入文件的主键data下面
f['label'] = label # 将数据写入文件的主键labels下面
f.close() # 关闭文件
wh5()