猿问

为什么我不能调整 PNG 文件的亮度级别

我有一些亮度不同的扫描图像。我希望均衡亮度级别以使图像(作为一个组)更加一致。我从 SO 借了一些代码(稍作改动),这些代码被描述为做我需要的事情。但是代码似乎根本没有效果。显然我做错了什么,但我似乎无法弄清楚。我想要做的是读取原始图像的感知亮度水平,并从中计算目标亮度水平并将该值传递给一个函数,该函数将(理论上)将图像亮度更改为感知亮度水平并创建一个新图像文件。


from os import listdir

import numpy as np

import cv2

from PIL import Image, ImageStat

import operator

import math


def brightness(fname):

    with Image.open(fname) as img:

        stat = ImageStat.Stat(img)

        r,g,b = stat.mean


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



def change_brightness(fname, value):

    if value == 0: return

    img = cv2.imread(SourceDir+fname,)

    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)


    cv2.add(hsv[:,:,2], value, hsv[:,:,2])


    img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

    cv2.imwrite(DestDir+fname, img)



SourceDir = 'I:\\'

DestDir = 'G:\\Documents\\'

InputFiles = []

BrightnessLevels = {}

TargetBrightness = 130


InputFiles = listdir(SourceDir)

try:

    InputFiles.remove('System Volume Information')

except:

    pass


InputFiles.sort()


for InputFile in InputFiles:

    old_b = brightness(SourceDir+InputFile)

    change = TargetBrightness-old_b

    change_brightness(InputFile, change)

    new_b = brightness(DestDir+InputFile)

    BrightnessLevels[InputFile] = (old_b, change, new_b)


sorted_b = sorted(BrightnessLevels.items(), key=operator.itemgetter(1))

for f,b in sorted_b:

    print(f,b)

元组的第一个值是图像的初始感知亮度。第二个值是对亮度级别的计算调整。第三个值是新图像文件的感知亮度级别。无论我尝试什么调整值,它们似乎都没有任何效果。并且通过视觉查看文件似乎同意它们看起来与原件相同。



哈士奇WWW
浏览 175回答 1
1回答

慕莱坞森

换行:cv2.add(hsv[:,:,2], value, hsv[:,:,2])所以它看起来像这样:hsv[:,:,2] = cv2.add(hsv[:,:,2], value)文档暗示的方式不起作用-我不知道为什么。
随时随地看视频慕课网APP

相关分类

Python
我要回答