如何将float32解释为numpy中的四个uint8?

时间:2016-10-25 20:38:32

标签: python numpy bitwise-operators

我尝试使用python读取点云数据文件,扩展名为“.pcd”。它们只用一个numpy float32存储RGBA颜色信息。 如何在python中将float32数据类型转换为4个uint8数字? 例如,数字4.51073351e-39中隐藏的rgb值是什么?

In [13]: pc.pc_data["rgb"]
Out[13]: 
array([  4.51073351e-39,   4.41853788e-39,   4.87845245e-39, ...,
         3.31220574e-39,   2.94594696e-39,   3.12997949e-39], dtype=float32)

以下是下载数据集的链接:http://rgbd-dataset.cs.washington.edu/dataset/rgbd-dataset_pcd_ascii/apple_1.tar

我使用pypcd来读取文件:这是pypcd github链接:https://github.com/dimatura/pypcd

2 个答案:

答案 0 :(得分:2)

我认为你想要pc.pc_data["rgb"].view((np.uint8, 4)),你的例子给出了:{/ p>

array([[23, 30, 49,  0],
       [22, 29, 48,  0],
       [36, 31, 53,  0],
       ...
       [21, 17, 36,  0],
       [26, 20, 32,  0],
       [28, 21, 34,  0]], dtype=uint8)

答案 1 :(得分:1)

派对真的很晚,但pypcd(此处作者)实际上将此功能设为Digest::SHA256.digest('pancakes') # => "\xD0@;\xE2\x99\x9CH\x99\xEF:>=f\xD5]\xF4h\x9F\x7F\xC5~\xBF\x8A\xB5yu\x94\x92M\x12O\x99" Digest::SHA256.hexdigest('pancakes') # => "d0403be2999c4899ef3a3e3d66d55df4689f7fc57ebf8ab5797594924d124f99" Digest::SHA256.base64digest('pancakes') # => "0EA74pmcSJnvOj49ZtVd9Giff8V+v4q1eXWUkk0ST5k=" ,您可以将其称为decode_rgb_from_pcl。不可否认,我喜欢@Eric实现这个比我更好的方式:D