为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哈士奇WWW 2022-05-19 16:15:49
我有一些亮度不同的扫描图像。我希望均衡亮度级别以使图像(作为一个组)更加一致。我从 SO 借了一些代码(稍作改动),这些代码被描述为做我需要的事情。但是代码似乎根本没有效果。显然我做错了什么,但我似乎无法弄清楚。我想要做的是读取原始图像的感知亮度水平,并从中计算目标亮度水平并将该值传递给一个函数,该函数将(理论上)将图像亮度更改为感知亮度水平并创建一个新图像文件。from os import listdirimport numpy as npimport cv2from PIL import Image, ImageStatimport operatorimport mathdef 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 = 130InputFiles = listdir(SourceDir)try:    InputFiles.remove('System Volume Information')except:    passInputFiles.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)元组的第一个值是图像的初始感知亮度。第二个值是对亮度级别的计算调整。第三个值是新图像文件的感知亮度级别。无论我尝试什么调整值,它们似乎都没有任何效果。并且通过视觉查看文件似乎同意它们看起来与原件相同。
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

换行:

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

所以它看起来像这样:

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

文档暗示的方式不起作用-我不知道为什么。


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信