点云ply文件转h5文件

前段时间在看文献 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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
点云换为深度图需要进行以下步骤: 1. 读取ply文件并将其换为点云数据结构。 2. 确定深度图的分辨率和范围。 3. 将点云中的每个点换为深度图像素坐标。 4. 将深度值分配给每个深度图像素。 以下是一个Python示例代码,可以将ply文件换为深度图: ```python import numpy as np import open3d as o3d from PIL import Image # 读取PLY文件并将其换为点云数据结构 pcd = o3d.io.read_point_cloud('input_cloud.ply') # 设置深度图的分辨率和范围 resolution = (512, 512) z_min = 0 z_max = 5 # 将点云中的每个点换为深度图像素坐标 depth_image = np.zeros(resolution, dtype=np.float32) for point in np.asarray(pcd.points): x, y, z = point i = int((x / z) * resolution[0] / 2 + resolution[0] / 2) j = int((y / z) * resolution[1] / 2 + resolution[1] / 2) if i >= 0 and i < resolution[0] and j >= 0 and j < resolution[1]: depth_image[j, i] = z # 将深度值分配给每个深度图像素 depth_image = (depth_image - z_min) / (z_max - z_min) * 255 depth_image = depth_image.astype(np.uint8) # 保存深度图 Image.fromarray(depth_image).save('output_depth.png') ``` 在此示例代码中,我们使用了Open3D库来读取PLY文件并将其换为点云数据结构。然后,我们定义了深度图的分辨率和范围,并将点云中的每个点换为深度图像素坐标。最后,我们将深度值分配给每个深度图像素,并将其保存为PNG文件。请注意,此示例代码仅适用于点云中没有重叠的情况。如果点云中存在重叠区域,则需要进行额外处理以避免深度图中的深度信息丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值