2014-02-21 83 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

相关问题