将图像实例(文件)转换为数组(python)

时间:2012-08-22 18:08:29

标签: python python-imaging-library tiff

我有一个图像序列,我正在尝试在特定帧上运行脚本。我需要切换到这个框架并将其转换为数组。但是,我无法将框架作为实例<TiffImagePlugin.TiffImageFile image mode=I;16 size=512x512 at 0x104A0C998>。如何将此实例转换为数组?我已经使用过numpy.array但它不起作用。 谢谢!

prot=Image.open("F23BN.tif")
for frame in ImageSequence.Iterator(dna):
    if frame==16:
        frame.convert('L')
        print frame.mode, frame.format #I checked the format and it is still in the Instance format

1 个答案:

答案 0 :(得分:6)

据我了解你的问题,你正试图访问tiff图像中包含的二进制数据。正如Dav1d建议你可以在PIL中做到这一点。我在python 2.6.5中测试了以下内容

import Image
import numpy

im = Image.open('Tiff.tif')

imarray = numpy.array(im)
print imarray.shape, im.size   #these agree

对于更难以执行此操作的方法,您可以像打开任何其他文件一样打开文件。在代码片段中,我假设您的文件不是太大而无法一次性加载到内存中。

im = open('Tiff.tif','r')
image_data = im.read()
im.close()

#lets look at the first few characters
for char in image_data[:64]:  
    print ord(char),  #need to use ord so we can see the number

使用字符串image_data中的数据,您可以将其转换为您希望的任何其他数据类型。但是,这可能不会立即起作用。首先,数据是二进制的。您需要使用tiff规范对其进行解密。例如,前8个字节是标题。

更多细节: http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf