使用PIL和Python阅读原始图像

时间:2010-12-23 06:23:01

标签: python image-processing python-imaging-library

我有一张从NASA获得的7GB图像,我想用Python和PIL编写一个解码器。我从中获取图像的页面说明了以下内容:

  

数据格式为a   单通道16位整数(两个   byte,long)签名的原始二进制文件,   使用big-endian字节顺序而没有   报头中。

Here's用于编写图像解码器的文档,但我没有太多使用Python处理图像的经验,而且我在这里完全失去了。

3 个答案:

答案 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