pypcd读取pcd时的坑

In [3]: pypcd.point_cloud_from_path("./1685500241500.pcd")
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Input In [3], in <cell line: 1>()
----> 1 pypcd.point_cloud_from_path("./1685500241500.pcd")

File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:295, in point_cloud_from_path(fname)
    292 """ load point cloud in binary format
    293 """
    294 with open(fname, 'rb') as f:
--> 295     pc = point_cloud_from_fileobj(f)
    296 return pc

File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:288, in point_cloud_from_fileobj(f)
    285 else:
    286     print('DATA field is neither "ascii" or "binary" or\
    287             "binary_compressed"')
--> 288 return PointCloud(metadata, pc_data)

File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:612, in PointCloud.__init__(self, metadata, pc_data)
    610 self.__dict__.update(metadata)
    611 self.pc_data = pc_data
--> 612 self.check_sanity()

File ~/.local/lib/python3.9/site-packages/pypcd/pypcd.py:625, in PointCloud.check_sanity(self)
    623 md = self.get_metadata()
    624 assert(_metadata_is_consistent(md))
--> 625 assert(len(self.pc_data) == self.points)
    626 assert(self.width*self.height == self.points)
    627 assert(len(self.fields) == len(self.count))

AssertionError:

可以看到报错说是数和pc_data不一样.
我的点云格式是这样的.

在这里插入图片描述

打印报错的第625行后, 发现是这样的
在这里插入图片描述

在这里插入图片描述

显然, pc_data的长度不合理. 不应该是1.

接下来看一下pypcd里面的 self.pc_data和self.points是如何定义的.

在这里插入图片描述

而传进来的是从这里.

在这里插入图片描述所以其实就是第255行的问题. 不该用 metadata[“width”]
在这里插入图片描述

因此这样改了之后就可以读了.

在这里插入图片描述

当然这个问题, 也可以直接把点云的header手动改一下, 即把 width和height的值互换一下. 这样就不用改pypcd的源码. 但是改源码更合适一些. 不同的点云, 有的是width等于点数,有的是height等于点数.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值