我正在尝试使用python将原始图像数据转换为png。 我是python的新手,尤其是图像处理......
原始文件是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 :(得分:0)
我不认为PIL理解numpy对象。我认为PIL Image有一种从磁盘读取原始文件的方法。然后,您可以修改内存中的图像,并以您喜欢的格式保存/导出它。
答案 1 :(得分:0)
PIL(和PILLOW)不能直接使用numpy数组。有一个函数可以在numpy中来回转换,但我倾向于不使用PIL来实现这种东西。
相反,我建议您使用scipy.misc.imsave()
保存数组,此功能可以保存为PNG。
答案 2 :(得分:0)
使用 raw2png.py
?
资料来源:http://www.cl.cam.ac.uk/~cs448/git/trunk/src/bin/raw2png.py
使用exec命令行的ImageMagick: convert
?