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 に答える