python图像亮度提取_使用Python分析图像亮度有哪些方法?

I'd like some advice on performing a simple image analysis in python. I need to calculate a value for the "brightness" of an image. I know PIL is the goto library for doing something like this. There is a built-in histogram function.

What I need is a "perceived brightness" values I can decide if further adjustments to the image are necessary. So what are something of the basic techniques that will work in this situation? Should I just work with the RGB values, or will histogram give me something close enough?

One possible solution might be to combine the two, and generate average R,G,and B values using the histogram, then apply the "perceived brightness" formula.

解决方案

Using the techniques mentioned in the question, I came up with a few different versions.

Each method returns a value close, but not exactly the same as the others. Also, all methods run about the same speed except for the last one, which is much slower depending on the image size.

Convert image to greyscale, return average pixel brightness.

def brightness( im_file ):

im = Image.open(im_file).convert('L')

stat = ImageStat.Stat(im)

return stat.mean[0]

Convert image to greyscale, return RMS pixel brightness.

def brightness( im_file ):

im = Image.open(im_file).convert('L')

stat = ImageStat.Stat(im)

return stat.rms[0]

Average pixels, then transform to "perceived brightness".

def brightness( im_file ):

im = Image.open(im_file)

stat = ImageStat.Stat(im)

r,g,b = stat.mean

return math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068*(b**2))

RMS of pixels, then transform to "perceived brightness".

def brightness( im_file ):

im = Image.open(im_file)

stat = ImageStat.Stat(im)

r,g,b = stat.rms

return math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068*(b**2))

Calculate "perceived brightness" of pixels, then return average.

def brightness( im_file ):

im = Image.open(im_file)

stat = ImageStat.Stat(im)

gs = (math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068*(b**2))

for r,g,b in im.getdata())

return sum(gs)/stat.count[0]

Update Test Results

I ran a simulation against 200 images. I found that methods #2, #4 gave almost identical results. Also methods #3, #5 were also nearly identical. Method #1 closely followed #3, #5 (with a few exceptions).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值