前言
最近在研究点云补全的内容时,一个方法输出的是.h5文件,CloudCompare无法打开.h5文件,需要转换成如.pcd文件的格式,从而方便可视化,在csdn查阅了一下转换的代码,我运行起来大多都有些问题,为了方便有同样需求的同学转换,因此记录一下。
代码部分
1.新建一个工具类
代码如下:
import os
# 传入点云对象
def points2pcd(points):
# 存放路径
PCD_DIR_PATH = os.path.join(os.path.abspath('.'), 'pcd')
PCD_FILE_PATH = os.path.join(PCD_DIR_PATH, 'cache.pcd')
if os.path.exists(PCD_FILE_PATH):
os.remove(PCD_FILE_PATH)
# 写文件句柄
handle = open(PCD_FILE_PATH, 'a')
# 得到点云点数
point_num = points.shape[0]
# pcd头部(重要)
handle.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(point_num)
handle.write(string)
handle.write('\nHEIGHT 1\nVIEWPOINT 0 0 0 1 0 0 0')
string = '\nPOINTS ' + str(point_num)
handle.write(string)
handle.write('\nDATA ascii')
# 依次写入点
for i in range(point_num):
string = '\n' + str(points[i, 0]) + ' ' + str(points[i, 1]) + ' ' + str(points[i, 2])
handle.write(string)
handle.close()
工具类可以命名为pcdcreate。
2.读取h5文件中的点云对象
在目录中自己建一个文件夹命名为pcd,以存放转换后的pcd文件,运行以下代码:
import h5py
import numpy as np
from pcdcreate import *
f = h5py.File('aa88acf77e718d93f3e1.h5','r')
points2pcd(f['data'][:])
即可生成pcd文件,用CloudCompare打开即可。
总结
本文是借鉴了点云对象转成pcd文件 (python)的方法,为了没转过的人更方便转换,遂详细给出了转换步骤。