简单实现PCL点云格式转化: XYZ to PCD

遇到了要将3D相机输出格式为xyz点云,转化为pcd格式的点云,以支持PCL的使用的问题
参考了百度到的一些博客后,决定自己尝试解决一下这个问题

https://blog.csdn.net/mrbaolong/article/details/106900358
https://blog.csdn.net/weixin_44023142/article/details/84931043

两篇博客都写的非常好,奈何我C++才疏学浅,最后没跑通
想来实现方法不重要,解决问题才重要,于是想用最简单的方式来解决

下面是完整的代码,虽然你转化的需求大概率和我不一样,但是非常好改。
基本看了就会,分分钟解决

with open(r'D:/workspace/xyz2pcd/currentscanmodel.xyz', 'r') as xyz_file:
    lines = xyz_file.readlines()

pcd_file = open("D:/workspace/xyz2pcd/currentscanmodel.pcd", 'w')

for i in range(len(lines)):
    x = lines[i].split()[0]
    y = lines[i].split()[1]
    z = lines[i].split()[2]
    r = lines[i].split()[3]
    g = lines[i].split()[4]
    b = lines[i].split()[5]
    
    if x == "0.000000" and y == "0.000000" and z == "0.000000":
        continue
    else:
        lines[i] = lines[i].replace(' ' + r + ' ' + g + ' ' + b, " " + str(4278190080))
        pcd_file.write(lines[i])

首先可以看一下xyz和pcd文件的内容都长啥样,记事本,notepad都能打开
PCD
XYZ
可以看出PCD格式比TXT多了Header,ascii格式的数据
PCD从左至右分别是x, y, z, 颜色信息
TXT从左至右分别是x, y, z, r, g, b

这就很好办了,打开pcd,程序加一个Header或者自己复制粘贴一个Header都ok;再把r, g, b换成pcd支持的格式。因为我不关心点云颜色,所以直接填的4278190080,需要颜色信息的话可以搜一下这个怎么转化

需要注意的是Header中的points,如果报错了往往是没有修改points的数目,需要改成你点云文件中实际的点云数,修改width * height = points

简单拆解下代码

读取xyz文件,路径换一下就ok

with open(r'D:/workspace/xyz2pcd/currentscanmodel.xyz', 'r') as xyz_file:
    lines = xyz_file.readlines()

新建一个pcd文件,以免改错了原来的xyz文件gg了

pcd_file = open("D:/workspace/xyz2pcd/currentscanmodel.pcd", 'w')

因为我不想要没有用的点云,所以if判断去除了空的点云,再替换rgb就搞定

for i in range(len(lines)):
    x = lines[i].split()[0]
    y = lines[i].split()[1]
    z = lines[i].split()[2]
    r = lines[i].split()[3]
    g = lines[i].split()[4]
    b = lines[i].split()[5]
    
    if x == "0.000000" and y == "0.000000" and z == "0.000000":
        continue
    else:
        lines[i] = lines[i].replace(' ' + r + ' ' + g + ' ' + b, " " + str(4278190080))
        pcd_file.write(lines[i])
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值