我有一些亮度不同的扫描图像。我希望均衡亮度级别以使图像(作为一个组)更加一致。我从 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)
文档暗示的方式不起作用-我不知道为什么。
添加回答
举报
0/150
提交
取消