2013-03-25 74 views
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,:]))) 
+0

哪一行发生了? – CppLearner 2013-03-25 18:27:30

+0

如果此问题已得到解答,则应接受最佳答案,请参阅[常见问题解答#howtoask]。 – askewchan 2013-04-16 16:12:39

回答

1

getpixel该方法在PIL似乎是绕其输入非常挑剔,特别希望的int秒(其是不一样的numpy的的uint64型)的元组。以下适用于我:

for ii in range(N): 
    coordinate = tuple(map(int, rand_pix[ii,:])) 
    rand_image.putpixel(coordinate, im.getpixel(coordinate))