2017-01-13 5 views
-1

Начиная с Python, я пытаюсь изменить значения пикселей изображения следующим образом. Я получаю сообщение об ошибке «TypeError: требуется целое число» в последней, но одной строке Как мне разобраться? Это мой код:TypeError: требуется целое число

from PIL import Image 
img = Image.open(r'...') 
pix = img.load() 
def quantf(pval): 
    if pval>=0 and pval<0.25: 
     pval=0 
    elif pval>=0.25 and pval<0.5: 
     pval=0.25 
    elif pval>=0.5 and pval<0.75: 
     pval=0.5 
    elif pval>=0.75 and pval<1: 
     pval=0.75 
    elif pval==1: 
     pval=1 
for i in range (0,31): 
    for j in range (0,31): 
     pix[i,j]=quantf(pix[i,j]) 
img.show() 

ответ

0

В соответствии с:

http://pillow.readthedocs.io/en/3.4.x/reference/PixelAccess.html#example

После выполнения загрузки изображения каждого пикселя является кортежем при использовании многополосного изображения а, в противном случае это индивидуальное значение:

from PIL import Image 
im = Image.open('hopper.jpg') 
px = im.load() 
print (px[4,4]) 

печатает:

(23, 24, 68) 

или

0.23 

Вам нужно настроить quantf(pval) функцию для того, чтобы учесть это, а также обеспечение того, чтобы quantf(pval) фактически возвращает значение.

Например:

def quantf(pval): 
    if pval[0]>=0 and pval[0]<64: 
     pval=(0, pval[1], pval[2]) 
    elif pval[0]>=64 and pval[0]<128: 
     pval=(64, pval[1], pval[2]) 
    elif pval[0]>=128 and pval[0]<192: 
     pval=(128, pval[1], pval[2]) 
    elif pval[0]>=192 and pval[0]<256: 
     pval=(192, pval[1], pval[2]) 
    return pval 

или

def quantf(pval): 
    if pval>=0 and pval<0.25: 
     pval=0 
    elif pval>=0.25 and pval<0.5: 
     pval=0.25 
    elif pval>=0.5 and pval<0.75: 
     pval=0.5 
    elif pval>=0.75 and pval<1: 
     pval=0.75 
    elif pval==1: 
     pval=1 
    return pval 
Смежные вопросы