2017-01-05 11 views
0

私はPythonとImage Processingの初心者です。次の関数を使用してイメージのピクセル値を変更しようとしています。しかし、私はエラーが発生しました。 TypeError: 'instancemethod'オブジェクトは、コードの12行目(最後は1行)にある をサポートしていません これを並べ替えるにはどうしますか? これは私のコードです:PythonでPIL TypeError: 'instancemethod'オブジェクトはアイテム割り当てをサポートしていません

from PIL import Image 
import math 
size=width,height=32,32 
img=Image.new("L", size, "white") 
pix=img.load 
for i in range (0,31): 
    for j in range (0,31): 
     sqsum=i*i+j*j 
     sqrt=math.sqrt(sqsum) 
     sine=math.sin(sqrt) 
     absval=abs(sine) 
     pix[i,j]=absval 
img.show() 
+4

ループの前に 'img.load'を呼び出さなかったためです。 'pix = img.load()'にする必要があります。 –

+0

ありがとう!私はそれを変更し、コードは正常に実行されます。 –

答えて

0

、オブジェクトのメソッドもあるオブジェクト自体 - instancemethodオブジェクトを。これは、代入で()を離れるとエラーにはならないことを意味し、期待したことはしません。それはむしろ一般的なタイプミスです。

pix=img.load() 
#   ^^ 

はちょうど自分自身に問う、このような問題をデバッグするには、「なぜ pix instancemethodのですか?」そこから後方に作業します。問題が発生した代入文に直接つながります。

+0

ありがとう!私はそれを変更し、今は正常に動作します。 –

+0

私はまだ問題を抱えています。 absvalを印刷しようとすると正しい十進数が出力されますが、pix [i、j](コードの最後の1行です)に割り当てた後、pix [i、j]を印刷しようとすると印刷されますすべてゼロを出力する。私はそれを正しく設定する方法を見つけ出すことができませんでした。 –

+0

@VenkateshSeetha 'L'モードでは、各ピクセルは0から255までの整数*です。数値をその範囲に拡大する必要があります。 –

関連する問題