1

このコードを実行すると、次の出力が得られます。

TypeError: an integer is required

両方のデータ型をそれぞれuint8とuint64に設定したため、なぜこれが発生するのかわかりません。どうやら私はデータ型をよく理解していません。

from PIL import Image

from numpy import random

N = 100

##open an image
im=Image.open('/Users/grahamwarner/Desktop/Experiment/gwarner/labeled_photos/masks/003030.png')

##create a random image
rand_matrix = random.randint(0, 255, (500, 500, 3)).astype('uint8')

rand_image = Image.fromarray(rand_matrix)

##select N random pixels
rand_pix = random.randint(0,499, (N,2)).astype('uint64')

##replace the random values at these pixels with the original values
for ii in range(N):

  rand_image.putpixel(tuple(rand_pix[ii,:]), im.getpixel(tuple(rand_pix[ii,:])))
4

1 に答える 1

1

getpixelPILのメソッドは、その入力について非常に慎重であるように思われ、特にintsのタプル(Numpyのuint64タイプとは異なります)が必要です。以下は私のために働きます:

for ii in range(N):
    coordinate = tuple(map(int, rand_pix[ii,:]))
    rand_image.putpixel(coordinate, im.getpixel(coordinate))
于 2013-03-25T18:36:36.447 に答える