我有一些亮度不同的掃描圖像。我希望均衡亮度級別以使圖像(作為一個組)更加一致。我從 SO 借了一些代碼(稍作改動),這些代碼被描述為做我需要的事情。但是代碼似乎根本沒有效果。顯然我做錯了什么,但我似乎無法弄清楚。我想要做的是讀取原始圖像的感知亮度水平,并從中計算目標(biāo)亮度水平并將該值傳遞給一個函數(shù),該函數(shù)將(理論上)將圖像亮度更改為感知亮度水平并創(chuàng)建一個新圖像文件。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)元組的第一個值是圖像的初始感知亮度。第二個值是對亮度級別的計算調(diào)整。第三個值是新圖像文件的感知亮度級別。無論我嘗試什么調(diào)整值,它們似乎都沒有任何效果。并且通過視覺查看文件似乎同意它們看起來與原件相同。
1 回答

慕萊塢森
TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
換行:
cv2.add(hsv[:,:,2], value, hsv[:,:,2])
所以它看起來像這樣:
hsv[:,:,2] = cv2.add(hsv[:,:,2], value)
文檔暗示的方式不起作用-我不知道為什么。
添加回答
舉報
0/150
提交
取消