我的问题如下:
我正在使用ROS,我目前正在尝试从Kinect传感器的PointCloud读取值。 值为PointCloud2类型,PointCloud2.data包含PointCloud的数据,类型为uint8 []。
在我的项目中,我目前正在使用python,并且我已经成功注册并检索了数据。我的问题是,当试图检索它们时,python将uint8 []数组解析为字符串。
我遇到问题的脚本的当前部分是以下内容:
date_range
我知道在c ++中我可以做类似
的事情def PointCloud(self, PointCloud2):
self.lock.acquire()
for x in PointCloud2.data:
print x
self.lock.release()
获取无符号整数的值。是否存在与python等效的静态强制转换?
在我的情况下,print x输出ASCII字符。 我怎样才能检索到它的int值?
干杯,
帕诺斯
答案 0 :(得分:3)
使用struct.unpack
获取x
中二进制数据编码的整数值。
print struct.unpack("!I", x)
(我假设x
包含网络字节顺序的4字节整数;如果您需要struct
以外的格式,请参阅!I
模块的文档。)< / p>
更新:我错过了你有一个无符号字节数组;在这种情况下,请使用
struct.unpack("B", x)
答案 1 :(得分:1)
Python不支持以任何形式进行转换;这是邪恶的。
实现您想要的一个版本是将数据转换为十六进制:
print ['%02x' % e for e in PointCloud2.data]
或者您可以使用struct
module将二进制数据转换为Python结构。如果您要处理数据,则应查看具有array
类型的Numpy,create from a lot of different source。
对于图像处理,请查看OpenCV。对于使用Kinect的现有Python工具,请参阅Python- How to configure and use Kinect