我有一个.pcd文件,当我使用文本编辑器打开它时,我看到了:
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z _
SIZE 4 4 4 1
TYPE F F F U
COUNT 1 1 1 4
WIDTH 246564
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 246564
DATA binary
É,> Ì= €¿ €? .> Ì=ÃY¿ €? .>Ì~Í= €¿ €? 2> Ì=5a¿ €? 2>øuÍ= €¿
€? 6> Ì=Ûv¿ €? 6>²vÌ= €¿ €?¹“6> Ì= €¿ €?CÊ"> Ä= €¿ €? & Ä=…¿
......
此格式的文档在这里:http://pointclouds.org/documentation/tutorials/pcd_file_format.php
文档示例:
# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
现在,我想将这些二进制数据转换为数字,就像文档中那样。如我所见,我可以使用python struck.unpack,但我不知道该怎么做。
答案 0 :(得分:0)
如果您要使用struct
,并且提供的文件是您唯一要从中提取数据的文件,则可以使用以下一种方法:
import struct
with open("your_file.pcd") as f:
lines = f.readlines()
unpacker = struct.Struct("fff4B")
packed_data = lines[-1]
x = []
y = []
z = []
_ = []
for i in range(0, 246564):
try:
unpacked = unpacker.unpack_from(packed_data[i:])
except struct.error:
break
x.append(unpacked[0])
y.append(unpacked[1])
z.append(unpacked[2])
_.append(unpacked[3:])
print(x)
print(y)
print(z)
print(_)
这当然不是解析PyPCD这样的PCD文件的通用方法,但是它确实适用于此特定文件和数据集。