天天看点

python实现图像的白平衡,破坏图像的白平衡(冷、暖)和调节图像的亮度

白平衡:

让实际环境中白色的物体在你拍摄的画面中也呈现出“真正”的白色。不同性质的光源会在画面中产生不同的色彩倾向,比如说,蜡烛的光线会使画面偏橘黄色,而黄昏过后的光线则会为景物披上一层蓝色的冷调。而我们的视觉系统会自动对不同的光线作出补偿,所以无论在暖调还是冷调的光线环境下,我们看一张白纸永远还是白色的。但相机则不然,它只会直接记录呈现在它面前的色彩,这就会导致画面色彩偏暖或偏冷。

破坏白平衡:

使图像偏暖或者偏冷。

思路:

白平衡的思想是将三原色的成分比例变得近似相同,而破坏白平衡则相反,增大b分量所占比例实现冷色调,增大r分量所占比例实现暖色调。

代码如下:

import cv2
import numpy as np
import os

# 将PNG文件夹下的所有图片批量处理
file = 'PNG/'
a = os.listdir(file)
print('done')
for shu in a:
    img = cv2.imread(file + shu, 1)
    height = img.shape[0]
    width = img.shape[1]
    dst = np.zeros(img.shape, img.dtype)

    # 1.计算三通道灰度平均值
    imgB = img[:, :, 0]
    imgG = img[:, :, 1]
    imgR = img[:, :, 2]

    # 下述3行代码控制白平衡或者冷暖色调,下例中增加了b的分量,会生成冷色调的图像,
    # 如要实现白平衡,则把两个+10都去掉;如要生成暖色调,则增加r的分量即可。
    bAve = cv2.mean(imgB)[0]
    gAve = cv2.mean(imgG)[0] + 10
    rAve = cv2.mean(imgR)[0] + 10
    aveGray = (int)(bAve + gAve + rAve) / 3

    # 2计算每个通道的增益系数
    bCoef = aveGray / bAve
    gCoef = aveGray / gAve
    rCoef = aveGray / rAve

    # 3使用增益系数
    imgB = np.floor((imgB * bCoef))  # 向下取整
    imgG = np.floor((imgG * gCoef))
    imgR = np.floor((imgR * rCoef))

    # 4将数组元素后处理
    for i in range(0, height):
        for j in range(0, width):
            imgb = imgB[i, j]
            imgg = imgG[i, j]
            imgr = imgR[i, j]
            if imgb > 255:
                imgb = 255
            if imgg > 255:
                imgg = 255
            if imgr > 255:
                imgr = 255
            dst[i, j] = (imgb, imgg, imgr)
    cv2.imwrite('leng/' + shu[:-4] + '_n' + '.png', dst)     # 输出路径

           

调节亮度

通过调节图像中整体的强度信息来实现。

代码如下:

import cv2
import numpy as np
import os

file1 = 'test/'   # 输入路径  批量处理
file2 = 'test_A/'  # 输出路径
a = os.listdir(file1)
for shu in a:
    img = cv2.imread(file1 + shu)
    img2 = np.zeros(img.shape, img.dtype)
    brightness = cv2.addWeighted(img, 1, img2, 2, -40)
    cv2.imwrite(file2 + shu[:-4] + '.png', brightness)   # 处理后图像的输出路径
           

继续阅读