2015-05-07 16 views
0

我的问题是这样的:静态投相当于在python

我使用ROS和我目前试图从Kinect感应器的点云读取数值。 这些值的类型为PointCloud2,PointCloud2.data包含PointCloud的数据并且类型为uint8 []。

在我的项目中,我正在使用python,并且我已经成功注册并检索了数据。我的问题是,当试图检索它们时,python将uint8 []数组解析为字符串。

在那里我有问题的脚本的当前部分是follwowing:

def PointCloud(self, PointCloud2): 
    self.lock.acquire() 
     for x in PointCloud2.data: 
      print x 
    self.lock.release() 

我知道,在C++中我可以这样做

std::cout << static_cast<int>(u); 

东西要获取无符号的价值整数。有没有相当于python的静态转换?

在我的情况下,print x输出ASCII字符。 我该如何检索那个int值?

干杯,

帕诺斯

回答

3

使用struct.unpack获得在x由二进制数据编码的整数值。

print struct.unpack("!I", x) 

(我假设x包含网络字节顺序一个4字节的整数;协商为struct模块的文档,如果你需要比!I的格式。)


更新:我错过了你有一个无符号字节数组;在这种情况下,使用

struct.unpack("B", x) 
+0

由于他使用'unit8 []',他将需要文档。 – Prusse

+0

感谢您的回应,更新确实有效! –

1

Python不支持以任何形式铸造;它是邪恶的。

一个版本来实现你想要的是将数据转换为十六进制:

print ['%02x' % e for e in PointCloud2.data] 

,或者您可以使用struct module将二进制数据转换成Python结构。如果你想处理数据,你应该看看Numpy,它有一个array类型,你可以create from a lot of different source

对于图像处理,请看OpenCV。现有的Python工具可以使用Kinect,请参阅Python- How to configure and use Kinect