点云对象转成pcd文件 (python)

由于需要做点云处理,在python中处理点云对象看不见效果很难受,于是想到将点云数据转成pcd文件,使用pcl查看空间形象。

我是先将点云从h5文件中读出,具体操作可以看我的另一个文章->博客直链

好了,我们在python中得到了点云对象,如图所示:
在这里插入图片描述
另起文件写一个工具类,定义一个写成pcd的方法

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()
头部信息要根据每个人的点云数据个性化

我的点云头部:
在这里插入图片描述
其中:
VERSION - 指定PCD文件版本
FIELDS - 指定点可以具有的每个维度/字段的名称。 我的是只有xyz 没有颜色信息
示例:

FIELDS x y z                                # XYZ data
FIELDS x y z rgb                            # XYZ + colors
FIELDS x y z normal_x normal_y normal_z    # XYZ + surface normals
FIELDS j1 j2 j3                            # moment invariants

SIZE - 以字节为单位指定每个尺寸的大小。例子:
unsigned char/char has 1 byte
unsigned short/short has 2 bytes
unsigned int/int/float has 4 bytes
double 8 bytes
TYPE - 将每个维度的类型指定为char。目前接受的类型是:
I - 表示有符号类型int8 (char),int16 (short)和int32 (int)
U - 表示无符号类型uint8 (unsigned char),uint16 (unsigned short),uint32 (unsigned int)
F - 代表float类型
COUNT - 指定每个维度有多少个元素。例如,x数据通常具有1个元素,但是像VFH的特征描述符 具有308个。基本上这是一种在每个点处引入nD直方图描述符的方法,并将它们视为单个连续的存储器块。默认情况下,如果COUNT不存在,则所有维度的计数设置为1。
WIDTH - 指定点云数据集中点的宽度。WIDTH有两个含义:
1、它可以指定云中点的总数(与POINTS相同,见下文),用于无组织的数据集;
2、它可以指定有组织的点云数据集的宽度(连续点的总数)。
HEIGHT - 指定点云数据集中点的高度。高度有两个含义:
1、它可以指定有组织的点云数据集的高度(总行数)
2、对于未组织的数据集它被设置为1(因此用于检查数据集是否被组织)。
VIEWPOINT -指定数据集中的点采集的视点。这可能稍后可能用于在不同坐标系之间建立变换,或用于辅助诸如曲面法线之类的需要一致定向的特征。
视点信息被指定为平移(tx ty tz)+四元数(qw qx qy qz)。默认值是:
VIEWPOINT 0 0 0 1 0 0 0
POINTS - 指定云中的总点数。
DATA - 指定点云数据存储的数据类型。从版本0.7开始,支持两种数据类型:ascii和binary

  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值