用PIL分配图像亮度值需要调试

2024-04-24 13:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据图像的亮度质量评分,我的代码对全色图像很好,但是当我试图使用透明的png时,它会抛出一个错误:r,g,b=统计平均值,太多的值无法解包…,任何提示或提示将不胜感激。在

这是我的代码:

def trim(im):
    bg = Image.new(im.mode, im.size, im.getpixel((0,0)))
    diff = ImageChops.difference(im, bg)
    diff = ImageChops.add(diff, diff, 2.0, -100)
    bbox = diff.getbbox()
    if bbox:
        return im.crop(bbox)

def brightness(stat):
    r,g,b = stat.mean
    brightness = math.sqrt(0.241 * (r ** 2) + 0.691 * (g ** 2) + 0.068 * (b ** 2))
    print 'perc brightness %s' % brightness
    return 1 - math.fabs(brightness / 100 - 1)

score_points = {
    'face': 120,
    'sat' : 50,
    'sharpness': 100,
    'bri': 50,
    'con': 100
}

filename = "tmp/thumb_2.png" 
im = Image.open(filename)

# crop all black borders
im = trim(im)

# check perceived brightness
v = ImageStat.Stat(im)
b = brightness(v) * score_points['bri']
print 'Brightness score: %s' % b

Tags: 代码图像cropimagereturnpngdefdiff