python用PIL如何获得一张图片的亮度值

在python中,能不能用一个值来表示一张图片的亮度。我现在想对比两个图片的亮暗程度,然后调节比较暗的那张图片的亮度。大家给个思路吧。PS。用灰度值的话,如何提取出来点数... 在python中,能不能用一个值来表示一张图片的亮度。我现在想对比两个图片的亮暗程度,然后调节比较暗的那张图片的亮度。大家给个思路吧。
PS。用灰度值的话,如何提取出来点数最多的那个值
展开
 我来答
扈忆彤Yr
推荐于2017-11-26 · TA获得超过1387个赞
知道小有建树答主
回答量:482
采纳率:100%
帮助的人:421万
展开全部
图像的亮度是指每一个点的亮度,如果比较两个图像的亮度的话可能就要计算所有点的亮度平均值,下面是计算某个点的亮度值的程序,仅供参考。
import Image
im=Image.open("d:/lena.jpg")
print im.mode #查看图像的模式
im1=im.convert("YCbCr") #转换图像的模式到视频模式
y,cb,cr=im1.getpixel((10,10)) #提取点(10,10)位置的亮度、蓝色分量、红色分量的值。
print y #输出亮度值
后面两步循环就可以计算整个图像的亮度平均值。
追问
为什么要转换到YCbCr格式?摄像头采集到的视频流默认是什么格式的?
追答
我查了PIL手册,只有YCbCr
格式的图像才可以取得亮度值。
摄像头采集到的视频流是一幅幅图像,没有默认格式,只有存储的视频文件才有格式。如果用OpenCV通过摄像头采集视频,通常可以用直接存储为avi格式。
張員瑛
2013-08-16 · TA获得超过154个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:248万
展开全部
import Image
def RGB_to_HSL(r,g,b):
    ''' Converts RGB colorspace to HSL (Hue/Saturation/Value) colorspace.
        Formula from http://www.easyrgb.com/math.php?MATH=M18#text18
       
        Input:
            (r,g,b) (integers 0...255) : RGB values
       
        Ouput:
            (h,s,l) (floats 0...1): corresponding HSL values
       
        Example:
            >>> print RGB_to_HSL(110,82,224)
            (0.69953051643192476, 0.69607843137254899, 0.59999999999999998)
            >>> h,s,l = RGB_to_HSL(110,82,224)
            >>> print s
            0.696078431373
    '''
    if not (0 <= r <=255): raise ValueError,"r (red) parameter must be between 0 and 255."
    if not (0 <= g <=255): raise ValueError,"g (green) parameter must be between 0 and 255."
    if not (0 <= b <=255): raise ValueError,"b (blue) parameter must be between 0 and 255."
   
    var_R = r/255.0
    var_G = g/255.0
    var_B = b/255.0
   
    var_Min = min( var_R, var_G, var_B )    # Min. value of RGB
    var_Max = max( var_R, var_G, var_B )    # Max. value of RGB
    del_Max = var_Max - var_Min             # Delta RGB value
   
    l = ( var_Max + var_Min ) / 2.0
    h = 0.0
    s = 0.0
    if del_Max!=0.0:
       if l<0.5: s = del_Max / ( var_Max + var_Min )
       else:     s = del_Max / ( 2.0 - var_Max - var_Min )
       del_R = ( ( ( var_Max - var_R ) / 6.0 ) + ( del_Max / 2.0 ) ) / del_Max
       del_G = ( ( ( var_Max - var_G ) / 6.0 ) + ( del_Max / 2.0 ) ) / del_Max
       del_B = ( ( ( var_Max - var_B ) / 6.0 ) + ( del_Max / 2.0 ) ) / del_Max
       if    var_R == var_Max : h = del_B - del_G
       elif  var_G == var_Max : h = ( 1.0 / 3.0 ) + del_R - del_B
       elif  var_B == var_Max : h = ( 2.0 / 3.0 ) + del_G - del_R
       while h < 0.0: h += 1.0
       while h > 1.0: h -= 1.0
    return (h,s,l)
def rgb2hsv(r, g, b):
    r, g, b = r/255.0, g/255.0, b/255.0
    mx = max(r, g, b)
    mn = min(r, g, b)
    df = mx-mn
    if mx == mn:
        h = 0
    elif mx == r:
        h = (60 * ((g-b)/df) + 360) % 360
    elif mx == g:
        h = (60 * ((b-r)/df) + 120) % 360
    elif mx == b:
        h = (60 * ((r-g)/df) + 240) % 360
    if mx == 0:
        s = 0
    else:
        s = df/mx
    v = mx
    return h, s, v
im=Image.open("bg_main.bmp")
(w,h)=im.size
for i in range(w):
    for j in range(h):
        (r,g,b)=im.getpixel((i,j))
        print rgb2hsl(r,g,b)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式