Python中计算图像亮度

Python中计算图像亮度的方法

PS:转载+翻译(有侵权告诉我,立马删除),为了自己记录;

以下几个方法每个方法都返回一个相近值,但与其他方法不完全相同。另外,除了最后一个方法,所有方法的运行速度都差不多,最后一个方法的运行速度要慢得多,这取决于图像的大小
对200幅图像进行了模拟测试。发现方法2和方法4给出了几乎相同的结果。方法3和方法5也几乎相同。方法1紧随方法3和方法5之后(有一些例外)。

  1. 转换图像到灰度,返回平均像素亮度:
def brightness( im_file ):
   im = Image.open(im_file).convert('L')
   stat = ImageStat.Stat(im)
   return stat.mean[0]
  1. 转换图像到灰度,返回RMS像素亮度:
def brightness( im_file ):
   im = Image.open(im_file).convert('L')
   stat = ImageStat.Stat(im)
   return stat.rms[0]
  1. 平均像素,然后转换为“可感知的亮度”:
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))
  1. 像素的均方根,然后转换为“感知亮度”:
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))

5 计算像素的“感知亮度”,然后返回平均值:

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]

你可能感兴趣的:(python,python,opencv)