4通道矩阵编码为图像,然后在字符串中

4 channel matrix coded as an image and then in a string

我有一个由图像数据组成的字节序列。图像数据是一个 4 通道矩阵。字节序列看起来像这样 --

b'33333\xf3#@33333\xf3#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99\xd9#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x00\x00\x00\x00\x00\xc0#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@fffff\xa6#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\xcd\xcc\xcc\xcc\xcc\x8c#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@33333s#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99Y#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x00\x00\x00\x00\x00@#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@fffff&#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\xcd\xcc\xcc\xcc\xcc\x0c#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@33333\xf3"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99\xd9"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x00\x00\x00\x00\x00\xc0"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@fffff\xa6"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\xcd\xcc\xcc\xcc\xcc\x8c"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@33333s"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99Y 

当然它不完整,因为它是一个 400X400 的字符串,有 4 个通道,每个通道是 4 个字节的浮点数。

我可以看到字节序列,但如何使用 python 将其重新转换为图像文件?

这是一种方法。

import array
data = array.array('d')
data.fromstring(yourdata)

当我在你的字符串上 运行 时,我得到:

array('d', [9.975, 9.975, nan, nan, 9.975, 9.924999999999999, nan, nan, 9.975, 9.875, nan, nan, 9.975, 9.825, nan, nan, 9.975, 9.775, nan, nan, 9.975, 9.725, nan, nan, 9.975, 9.674999999999999, nan, nan, 9.975, 9.625, nan, nan, 9.975, 9.575, nan, nan, 9.975, 9.525, nan, nan, 9.975, 9.475, nan, nan, 9.975, 9.424999999999999, nan, nan, 9.975, 9.375, nan, nan, 9.975, 9.325, nan, nan, 9.975, 9.275, nan, nan, 9.975, 9.225, nan, nan, 9.975])

然后您需要将其转换为 [x,x,4] 数组。 Numpy 可以提供帮助。

跟进

前八个字节是'33333\xf3#@'。在十六进制中,这是 33 33 33 33 33 f3 23 40。转换为小端,即0x4023f33333333333。那恰好是浮点数9.975的二进制表示。