从原始二进制图像数据到Python中的PNG

时间:2016-09-25 21:17:39

标签: python numpy matplotlib

搜索了几个小时后,我最终找到了this链接。下面是一些背景信息。

我通过硬件调试器捕获正在运行的嵌入式设备的实时帧。捕获的帧存储为raw binary file s,没有标题或格式。在看了上面的链接和理解之后,尽管是敷衍,NumPY和Matplotlib,我能够成功地将原始二进制数据转换为图像。这很重要,因为我不确定原始二进制文件的链接是否对任何人都有帮助。

我使用此代码:

import matplotlib.pyplot as plt # study documentation
import numpy as np              #   "       " 

iFile = "FramebufferL0_0.bin" # Layer-A
shape = (430, 430) # length and width of the image
dtype = np.dtype('<u2') # unsigned 16 bit little-endian.
oFile = "FramebufferL0_0.png"

fid = open(iFile, 'rb')
data = np.fromfile(fid, dtype)
image = data.reshape(shape)

plt.imshow(image, cmap = "gray")
plt.savefig(oFile)
plt.show()

现在,我显示的图像是黑白的,因为彩色图是灰度的(对吗?)。实际捕获的帧不是黑白的。也就是说,我在嵌入式设备上看到的图像是多彩的&#34;。

我的问题是,如何从原始二进制文件中计算每个像素的实际颜色?有没有办法从原始二进制文件中获取图像的实际颜色映射?我查看了this示例,我确信,如果我能够计算R,G和B通道(以及Alpha也是如此),我将能够重新创建确切的图像。示例代码会有很大帮助。

1 个答案:

答案 0 :(得分:2)

RGBA图像有4个通道,每个颜色一个,alpha值一个。二进制文件似乎只有一个通道,因为在执行data.reshape(shape)操作时不会报告错误(相应RGBA图像的形状为(430,430,4))。 我认为有两个可能的原因:

  1. 图像实际上有颜色信息,但是当您抓取数据时,您只抓取四个频道中的一个。

  2. 图像实际上是灰度图像,但嵌入式设备显示伪彩色图像,从而产生颜色信息的错觉。在不知道使用colourmap的情况下,除了指向matplotlib.pyplot.colormaps()之外,很难为您提供帮助,其中列出了matplotlib中所有已经可用的颜色贴图。

  3. 你能

    吗?

    a)解释成像模态的确切来源/类型,

    b)显示嵌入式设备输出的照片?

    PS:另外,至少在我手中,粘贴的二进制文件似乎大小为122629,这与图像形状(430,430)不一致。

相关问题