白平衡:
讓實際環境中白色的物體在你拍攝的畫面中也呈現出“真正”的白色。不同性質的光源會在畫面中産生不同的色彩傾向,比如說,蠟燭的光線會使畫面偏橘黃色,而黃昏過後的光線則會為景物披上一層藍色的冷調。而我們的視覺系統會自動對不同的光線作出補償,是以無論在暖調還是冷調的光線環境下,我們看一張白紙永遠還是白色的。但相機則不然,它隻會直接記錄呈現在它面前的色彩,這就會導緻畫面色彩偏暖或偏冷。
破壞白平衡:
使圖像偏暖或者偏冷。
思路:
白平衡的思想是将三原色的成分比例變得近似相同,而破壞白平衡則相反,增大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) # 處理後圖像的輸出路徑