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

标签 python python-3.x opencv image-processing

我有一些亮度不同的扫描图像。我希望均衡亮度级别以使图像(作为一个组)更加一致。我从 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)

我得到的结果如下:

Page-003.png (89, 41, 89)
Page-082.png (89, 41, 89)
Page-047.png (90, 40, 89)
Page-075.png (92, 38, 91)
Page-111.png (92, 38, 91)
Page-071.png (92, 38, 92)
Page-074.png (92, 38, 92)
Page-077.png (92, 38, 92)
Page-112.png (93, 37, 93)
Page-079.png (94, 36, 93)
Page-078.png (94, 36, 94)
Page-031.png (95, 35, 95)
Page-083.png (95, 35, 95)
Page-023.png (96, 34, 96)
Page-050.png (96, 34, 96)
Page-081.png (96, 34, 96)
Page-098.png (96, 34, 96)
Page-099.png (96, 34, 96)
Page-033.png (97, 33, 96)
Page-094.png (97, 33, 97)
Page-107.png (97, 33, 97)
Page-038.png (98, 32, 98)
Page-039.png (98, 32, 98)
Page-095.png (98, 32, 98)
Page-096.png (98, 32, 98)
Page-106.png (98, 32, 98)
Page-108.png (98, 32, 98)
Page-018.png (99, 31, 99)
Page-046.png (99, 31, 99)
Page-072.png (99, 31, 99)
Page-097.png (99, 31, 99)
Page-066.png (100, 30, 99)
Page-080.png (100, 30, 99)
Page-110.png (100, 30, 99)
Page-011.png (100, 30, 100)
Page-121.png (100, 30, 100)
Page-109.png (101, 29, 100)
Page-006.png (101, 29, 101)
Page-051.png (101, 29, 101)
Page-007.png (102, 28, 102)
Page-010.png (102, 28, 102)
Page-015.png (102, 28, 102)
Page-025.png (102, 28, 102)
Page-049.png (102, 28, 102)
Page-052.png (102, 28, 102)
Page-056.png (102, 28, 102)
Page-065.png (102, 28, 102)
Page-076.png (102, 28, 102)
Page-086.png (102, 28, 102)
Page-102.png (102, 28, 102)
Page-122.png (102, 28, 102)
Page-067.png (103, 27, 102)
Page-092.png (103, 27, 102)
Page-116.png (103, 27, 102)
Page-014.png (103, 27, 103)
Page-084.png (103, 27, 103)
Page-103.png (103, 27, 103)
Page-115.png (103, 27, 103)
Page-026.png (104, 26, 103)
Page-059.png (104, 26, 103)
Page-012.png (104, 26, 104)
Page-024.png (104, 26, 104)
Page-048.png (104, 26, 104)
Page-123.png (104, 26, 104)
Page-009.png (105, 25, 105)
Page-034.png (105, 25, 105)
Page-087.png (105, 25, 105)
Page-114.png (105, 25, 105)
Page-118.png (105, 25, 105)
Page-119.png (105, 25, 105)
Page-030.png (106, 24, 105)
Page-043.png (106, 24, 105)
Page-062.png (106, 24, 105)
Page-063.png (106, 24, 105)
Page-035.png (106, 24, 106)
Page-126.png (106, 24, 106)
Page-113.png (107, 23, 106)
Page-044.png (107, 23, 107)
Page-068.png (107, 23, 107)
Page-019.png (108, 22, 107)
Page-070.png (108, 22, 107)
Page-054.png (108, 22, 108)
Page-064.png (108, 22, 108)
Page-090.png (108, 22, 108)
Page-002.png (109, 21, 108)
Page-058.png (109, 21, 108)
Page-091.png (109, 21, 108)
Page-020.png (109, 21, 109)
Page-101.png (109, 21, 109)
Page-104.png (110, 20, 109)
Page-032.png (110, 20, 110)
Page-004.png (111, 19, 111)
Page-040.png (112, 18, 111)
Page-021.png (112, 18, 112)
Page-041.png (112, 18, 112)
Page-061.png (113, 17, 113)
Page-016.png (114, 16, 114)
Page-055.png (114, 16, 114)
Page-008.png (115, 15, 114)
Page-117.png (115, 15, 115)
Page-042.png (116, 14, 116)
Page-036.png (118, 12, 117)
Page-085.png (130, 0, 129)
Page-022.png (131, -1, 131)
Page-073.png (131, -1, 131)
Page-027.png (133, -3, 132)
Page-124.png (133, -3, 132)
Page-005.png (133, -3, 133)
Page-057.png (134, -4, 133)
Page-013.png (135, -5, 135)
Page-037.png (135, -5, 135)
Page-105.png (137, -7, 137)
Page-120.png (137, -7, 137)
Page-045.png (138, -8, 138)
Page-060.png (139, -9, 139)
Page-093.png (139, -9, 139)
Page-017.png (140, -10, 140)
Page-125.png (141, -11, 140)
Page-089.png (142, -12, 141)
Page-029.png (142, -12, 142)
Page-028.png (143, -13, 142)
Page-069.png (145, -15, 145)
Page-053.png (147, -17, 146)
Page-100.png (149, -19, 149)
Page-088.png (150, -20, 149)

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

最佳答案

改变行:

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

看起来像这样:

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

它并不像文档所暗示的那样工作 - 我不知道为什么。

关于python - 为什么我不能调整 PNG 文件的亮度级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776657/

相关文章:

python - 创建没有重复的树

c++ - 在 C++ 中使用 OpenCV 2.4 计算凸性缺陷

requirements.txt中的Python更新包版本

Python:如何获取当前带宽使用情况?

python - 将数组与python中的多行匹配进行比较

Android OpenCv Utils:nMatToBitmap 捕获了 cv::Exception:

opencv - 在 ubuntu 14.10 中安装 Opencv

php - phpcurl 的 Soap Python 响应中的 NameError

python-3.x - 使用另一个值更新 pandas 数据框的正确方法

python - 更改命名元组列表的值