2014-02-21 106 views
2

我試圖用python將原始圖像數據轉換爲png。 我很新的python,尤其是圖像處理...如何使用python將原始圖像轉換爲png

原始文件是一個16位灰度圖像。

正如我已經掃描了論壇,我想出了以下解決方案:

from PIL import Image, ImageFilter 
import numpy as np 
from scipy import ndimage, misc 


rawfile = np.fromfile('test.raw', dtype=np.int16) 

rawfile.shape = (1025,1025) 
imgSize = (1025,1025) 

img = Image.fromstring('L', imgSize, rawfile, 'raw', 'F;16') 
img.save("rawData.png") 

但我不斷收到以下錯誤:

Traceback (most recent call last): 
    File "****\Programs\Python 2.7.6\readraw\readraw.py", line 11, in <module> 
    img = Image.fromstring('L', imgSize, rawfile, 'raw', 'F;16') 
    File "****\Programs\Python 2.7.6\lib\site-packages\PIL\Image.py", line 1835, in fromstring 
    return frombytes(*args, **kw) 
    File "****\Programs\Python 2.7.6\lib\site-packages\PIL\Image.py", line 1822, in frombytes 
    im.frombytes(data, decoder_name, args) 
    File "****\Programs\Python 2.7.6\lib\site-packages\PIL\Image.py", line 608, in frombytes 
    d = _getdecoder(self.mode, decoder_name, args) 
    File "****\Programs\Python 2.7.6\lib\site-packages\PIL\Image.py", line 390, in _getdecoder 
    return decoder(mode, *args + extra) 
ValueError: unknown raw mode 

有人能向我解釋爲什麼原始模式未知?我檢查了Docs,並且據我瞭解這個主題,PILLOW lib應該帶這個?!

問候


謝謝你們的幫助!

我改變了我的代碼,現在它似乎工作:

from PIL import Image, ImageFilter 
import numpy as np 
from scipy import ndimage, misc 


rawfile = np.fromfile('test.raw', "uint16") 

rawfile.shape = (1025,1025) 
misc.imsave("test.png", rawfile) 

回答

0

PIL(和PILLOW)不能直接與numpy數組一起工作。有一個函數可以在numpy中來回轉換,但我傾向於不使用PIL來處理這種東西。

相反,我建議你用scipy.misc.imsave()保存你的數組,這個功能可以保存爲PNG。

0

我不認爲PIL理解numpy的對象。我會認爲PIL Image有一個方法來從磁盤讀取原始文件。然後您可以修改內存中的圖像並以您喜歡的格式保存/導出它。

+0

這就是我第一次想到的,但我找不到在他們的文檔中列出的任何方法。我發現的唯一的東西是和教程代碼自己的解碼器 – user3338564

0

使用raw2png.py

來源:http://www.cl.cam.ac.uk/~cs448/git/trunk/src/bin/raw2png.py

或者ImageMagick的使用exec命令行:convert

+0

tbh這個源代碼真的讓我感到困惑...我試圖閱讀和理解它,但作爲一個初學者,這是一個非常艱鉅的任務:) – user3338564

相關問題