我有一张从NASA获得的7GB图像,我想用Python和PIL编写一个解码器。我从中获取图像的页面说明了以下内容:
数据格式为a 单通道16位整数(两个 byte,long)签名的原始二进制文件, 使用big-endian字节顺序而没有 报头中。
Here's用于编写图像解码器的文档,但我没有太多使用Python处理图像的经验,而且我在这里完全失去了。
答案 0 :(得分:2)
我处理的是原始图像,有些是16位,有些是8位灰度。
我发现将原始图像加载到numpy数组中,然后将其转换为图像通常会有效。
如果字节顺序有问题,那么numpy array.byteswap()命令应该在转换为PIL图像对象之前处理它。
此代码取自一个程序,该程序用于将8位原始图像读入PIL:
scene_infile = open(scene_infile_fullname,'rb')
scene_image_array = fromfile(scene_infile,dtype=uint8,count=rows*columns)
scene_image = Image.frombuffer("I",[columns,rows],
scene_image_array.astype('I'),
'raw','I',0,1)
在第二行中,从uint8更改为uint16将加载2字节而不是1字节的原始图像。在第三行中,图像被转换为4字节整数,因为某些PIL例程似乎在这种类型下工作得更好。
答案 1 :(得分:0)
您遇到的问题是,当PIL仅支持提供列表中的8位像素时,文件为16位像素,而对于同一主题,此邮件中的16位小端:
http://osdir.com/ml/python.image/2006-11/msg00021.html
那是4年前的事,今年再次提出同样的主题:
http://mail.python.org/pipermail/image-sig/2010-April/006166.html
答案 2 :(得分:0)
在[{1}}的{{1}}来源.../Imaging-1.1.7/PIL/Image.py
中找到了这一点,请注意最后关于某些“实验模式”的评论:
PIL v1.1.7
所以看起来它对16位图像有一些支持。
UTSL - 使用Source Luke