我有一系列的float64,表示rgb值,我想用python将其解释为图像。对于每个float64,位0-15对应于uint8的红色值数据,位16-31是绿色,位32-47是蓝色。如何获取这些整数RGB值?
我知道在python中进行这种位操作非常奇怪,但请耐心等待。基本上,我只需要将float的底层位解释为int(而不是尝试转换)。我找到的最接近允许我访问位值的工具是python struct,但它似乎并没有真正做到我想要的(而且我确定它非常低效)。
我曾尝试使用以下代码来实现:
我不确定这个做了什么,但是无论它做了什么,它都没有给我想要的输出字节数。希望至少能说明我正在尝试做什么。
我知道在python中进行这种位操作非常奇怪,但请耐心等待。基本上,我只需要将float的底层位解释为int(而不是尝试转换)。我找到的最接近允许我访问位值的工具是python struct,但它似乎并没有真正做到我想要的(而且我确定它非常低效)。
我曾尝试使用以下代码来实现:
raw_byte_data = struct.pack('f', float_value)
data_as_int = struct.unpack('i', raw_byte_data)[0]
r = data_as_int & 0xFF
g = data_as_int >> 8 & 0xFF
b = data_as_int >> 16 & 0xFF
我不确定这个做了什么,但是无论它做了什么,它都没有给我想要的输出字节数。希望至少能说明我正在尝试做什么。
struct
来完成,但也许numpy会更加灵活。 - juanpa.arrivillagauint8
是 8 位,而不是 16 位。你是指uint16
吗?还是我对图像表示方式有什么误解? - juanpa.arrivillagar,g,b = struct.unpack_from('HHH', struct.pack('d', 3.14159))
这样的东西,其中'd'
是双精度浮点数(你想要的是float64而不是float32),并且你想要解包3个无符号长整型(uint16)。 - juanpa.arrivillaga