0

我有一个图像序列,我正在尝试在特定帧上运行脚本。我需要切换到此帧并将其转换为数组。但是,我不能,因为框架是一个实例<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
4

1 回答 1

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

于 2012-08-22T22:47:30.127 回答