TypeError:需要一个整数

时间:2017-01-13 09:45:11

标签: python image-processing python-imaging-library

初学者到Python,我一直试图改变图像的像素值,如下所示。我一直收到一个错误,上面写着'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()

1 个答案:

答案 0 :(得分: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