2015-09-07 541 views
4

我一直在google搜索使用python庫顯示原始圖像數據的方法,但找不到任何合適的解決方案。數據來自相機模塊,並具有'.raw'擴展名。當我試圖通過'more filename.raw'在終端打開它時,控制檯說這是一個二進制文件。廠商告訴我,相機輸出16位原始灰度數據。使用python打開.raw圖像數據

但我想知道如何通過PIL,Pillow或Numpy顯示這些數據。我測試了PIL的Image模塊。但是,它無法識別圖像數據文件。看來PIL不會將.raw文件視爲圖像數據格式。可以顯示BMP文件,但是'.raw'不能。

此外,當我試圖與剛纔讀功能和matplotlib,如以下

from matplotlib import pyplot as plt 
f = open("filename.raw", "rb").read() 
plt.imshow(f) 
plt.show() 

然後用

ERROR: Image data can not convert to float

任何想法可以理解發生了錯誤。

鏈接: camera module

我做了一些改進與下面的代碼。但現在問題是這個代碼只顯示整個圖像的一部分。

from matplotlib import pyplot as plt 
import numpy as np 
from StringIO import StringIO 
from PIL import * 
scene_infile = open('G0_E3.raw','rb') 
scene_image_array = np.fromfile(scene_infile,dtype=np.uint8,count=1280*720) 
scene_image = Image.frombuffer("I",[1280,720], 
           scene_image_array.astype('I'), 
           'raw','I',0,1) 
plt.imshow(scene_image) 
plt.show() 
+0

RAW在位圖或jpeg的意義上不是圖像格式。這些圖像包含每個像素的顏色,例如rgb值。 RAW基本上包含了照片船的原始數據,尚未轉換爲顏色值(因此是16位灰度)。這就是爲什麼它經常被(半)專業攝影師用來改變顏色在後期處理中的顯示方式。由於將數據轉換爲每個像素的顏色的步驟尚未完成,因此所有標準圖片庫很可能無法讀取RAW數據格式。 – Dux

+0

你是否搜索過numpy和RAW?我記得一些關於RAW的具有品牌特定標題塊的內容。 – hpaulj

+0

你可能想看看[rawkit](https://github.com/photoshell/rawkit)。我從來沒有使用它,所以不能評論它對你的用處,但它看起來可能有幫助 – tom

回答

3

rawpy看一看:

import rawpy 
import imageio 

path = 'image.raw' 
raw = rawpy.imread(path) 
rgb = raw.postprocess() 
imageio.imsave('default.tiff', rgb) 

rgb只是一個RGB numpy的數組,所以你可以使用任何庫(不只是imageio)將其保存到磁盤。

如果您要訪問的未經處理的拜爾數據,然後執行:

bayer = raw.raw_image 

又見API docs