2016-09-25 26 views
2

数時間の検索の後、thisリンクに行きました。少しの背景情報が続きます。PythonのRawバイナリイメージデータから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() 

を、Iが示していた画像が白黒である(右?)。実際にキャプチャされたフレームは白黒ではありません。つまり、私の組み込み機器で見る画像は「カラフル」です。

私の質問は、生のバイナリファイルから各ピクセルの実際の色をどのように計算できますか?生のバイナリからイメージの実際のカラーマップを取得する方法はありますか?私はthisの例を調べましたが、R、G、Bチャンネル(およびアルファも)を計算できれば、正確な画像を再現することができます。コード例は非常に役立つでしょう。

答えて

2

RGBAイメージには、各色に1つとアルファ値に1つの4つのチャネルがあります。 data.reshape(shape)操作を実行するときにエラーを報告しないので、バイナリファイルは1つのチャネルを持つように見えます(対応するRGBAイメージのシェイプは(430,430,4)になります)。実際には、色情報を持っているが、あなたはデータをつかんされているときにのみ、4つのチャンネルのいずれかをつかんでいる

  1. 画像: は、私は2つの潜在的な理由を参照してください。

  2. イメージは実際にはグレースケールイメージですが、組み込みデバイスは疑似カラーイメージを表示し、色情報の錯覚を作り出します。どの色マップが使用されているかわからない場合は、matplotlib.pyplot.colormaps()を指す以外に、matplotlibのすべての利用可能なカラーマップが一覧表示されます。

あなたは

a)のイメージングモダリティの正確なソース/タイプを説明し、

Bでしたが)、組み込みデバイスの出力の写真を示して?

PS:少なくとも私の手で貼り付けられたバイナリファイルのサイズは122629で、画像の形状が(430,430)ではないようです。

+0

"実際の画像には色の情報がありますが、データを取得しているときには4つのチャンネルのうちの1つしか取得できません。"はい、それは問題だと思います。どのようにして各チャンネルを別々に取得できますか? 間違ったバイナリファイルを貼り付けましたが、正しいです:http://pastebin.com/FGEDRbjC これは430 * 430(サイズ== 184990)の画像形状と一致しています。 –

関連する問題