2016-09-25 96 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)的圖像形狀一致, –