将ContextCapture生成的点云数据转化为PCL可以处理的数据格式

本文主要介绍将ContextCapture生成的点云数据转化为PCL可以处理的数据格式,即通过在ContextCapture生成的点云数据前面加上一些文件头。

示例代码:

file = open('point2.txt')
# 读取所需数据
val_list = file.readlines()
list_x = []
list_y = []
list_z = []
list_rgb = []

for string in val_list:
    str2 = string.split(' ')
    list_x.append(float(str2[0]))
    list_y.append(float(str2[1]))
    list_z.append(float(str2[2]))
    '''
    pcd文件中的格式为x y z rgb而不是分开的r g b,所以在原数据的基础上要进行变形,
    由r g b得到rgb(float):int rgb = ((int)r << 16 | (int)g << 8 | (int)b);  式中的“<<”为左移符号;
    由rgb得到r g b(int):int r = (rgb >> 16) & 0x0000ff;                              int g = (rgb >> 8) & 0x0000ff; 
                                     int b = (rgb) & 0x0000ff; 
    '''
    list_rgb.append(int(str2[3])<<16 | int(str2[4])<<8 | int(str2[5]))

max1 = max(list_x)
min1 = min(list_x)
length1 = max1 - min1

max2 = max(list_y)
min2 = min(list_y)
length2 = max2 - min2

max3 = max(list_z)
min3 = min(list_z)
length3 = max3 - min3
# 数据归一化
list_x_r = []
list_y_r = []
list_z_r = []
for i in range(len(list_x)):
    list_x_r.append(((list_x[i] - min1) / length1))
    list_y_r.append((list_y[i] - min2) / length2)
    list_z_r.append((list_z[i] - min3) / length3)

# 导出所需数据
with open('result.pcd', 'w') as f:    # 设置文件对象
    # 写入文件头
    f.write('# .PCD v.7 - Point Cloud Data file format\n'
            'VERSION .7\n'
            'FIELDS x y z rgb\n'
            'SIZE 4 4 4 4\n'
            'TYPE F F F F\n'
            'COUNT 1 1 1 1\n'
            'WIDTH ' + str(len(list_x_r)) + '\n'
            'HEIGHT 1\n'
            'VIEWPOINT 0 0 0 1 0 0 0\n'
            'POINTS ' + str(len(list_x_r)) + '\n'
            'DATA ascii\n')
    # 写入坐标数据和颜色数据
    for i in range(len(list_x_r)):
        stringr = str(list_x_r[i]) + ' ' + str(list_y_r[i]) + ' ' + str(list_z_r[i]) + ' ' + str(list_rgb[i]) +'\n'
        f.write(stringr)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cchangcs

谢谢你的支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值