白平衡:
让实际环境中白色的物体在你拍摄的画面中也呈现出“真正”的白色。不同性质的光源会在画面中产生不同的色彩倾向,比如说,蜡烛的光线会使画面偏橘黄色,而黄昏过后的光线则会为景物披上一层蓝色的冷调。而我们的视觉系统会自动对不同的光线作出补偿,所以无论在暖调还是冷调的光线环境下,我们看一张白纸永远还是白色的。但相机则不然,它只会直接记录呈现在它面前的色彩,这就会导致画面色彩偏暖或偏冷。
破坏白平衡:
使图像偏暖或者偏冷。
思路:
白平衡的思想是将三原色的成分比例变得近似相同,而破坏白平衡则相反,增大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) # 处理后图像的输出路径