2016-09-25 97 views
2

搜索了几个小时后,我结束了this链接。以下是一些背景信息。从原始的二进制图像数据到Python中的PNG

我通过硬件调试器捕捉正在运行的嵌入式设备的活动帧。捕获的帧存储为raw binary file,没有标题或格式。在看过上面的链接和理解之后,尽管敷衍,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() 

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

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

回答

2

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

  1. 图像实际确实有颜色信息,但是当你抓住你只抓住四个通道的一个数据。

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

莫非你

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

b)示出的嵌入式装置的输出的照片?

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

+0

“图像确实有颜色信息,但是当您抓取数据时,您只能抓取四个通道中的一个。”是的,我想这似乎是问题所在。我怎样才能分别获取每个频道? 我粘贴了错误的二进制文件,正确的是:http://pastebin.com/FGEDRbjC 这与430 * 430(size == 184990)的图像形状一致, –