Используя методы, упомянутые в вопросе, я придумал несколько разных версий.
Каждый метод возвращает значение close, но не точно так же, как другие.Кроме того, все методы работают с одинаковой скоростью, за исключением последней, которая значительно медленнее в зависимости от размера изображения.
Преобразование изображения в оттенки серого, возврат средней яркости пикселей.
def brightness( im_file ):
im = Image.open(im_file).convert('L')
stat = ImageStat.Stat(im)
return stat.mean[0]
Преобразовать изображение в оттенки серого, вернуть среднеквадратическую яркость пикселей.
def brightness( im_file ):
im = Image.open(im_file).convert('L')
stat = ImageStat.Stat(im)
return stat.rms[0]
Средние пиксели, а затем преобразовать в "воспринимаемую яркость".
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 пикселей, затем преобразуйте в «воспринимаемую яркость».
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))
Рассчитайте «воспринимаемую яркость» пикселей, затем вернитесреднее.
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]
Обновить результаты теста Я запустил симуляцию на 200 изображениях.Я обнаружил, что методы № 2, № 4 дали почти идентичные результаты.Также методы № 3, № 5 также были почти идентичны.Метод № 1 внимательно следовал № 3, № 5 (за некоторыми исключениями).