Open Pin-Jiun opened 1 year ago
白平衡: 讓實際環境中白色的物體在你拍攝的畫面中也呈現出“真正”的白色。不同性質的光源會在畫面中產生不同的色彩傾向,比如說,蠟燭的光線會使畫面偏橘黃色,而黃昏過後的光線則會為景物披上一層藍色的冷調。而我們的視覺系統會自動對不同的光線作出補償,所以無論在暖調還是冷調的光線環境下,我們看一張白紙永遠還是白色的。但相機則不然,它只會直接記錄呈現在它面前的色彩,這就會導致畫面色彩偏暖或偏冷。
破壞白平衡: 使圖像偏暖或者偏冷。
思路 白平衡的思想是將三原色的成分比例變得近似相同 而破壞白平衡則相反,增大b分量所占比例實現冷色調,增大r分量所占比例實現暖色調。
def modify_color_temperature(img): # ---------------- 冷色調 ---------------- # # 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] # 調整色調請調整這邊~~ # 白平衡 -> 三個值變化相同 # 冷色調(增加b分量) -> 除了b之外都增加 # 暖色調(增加r分量) -> 除了r之外都增加 bAve = cv2.mean(imgB)[0] gAve = cv2.mean(imgG)[0] + 20 rAve = cv2.mean(imgR)[0] + 20 aveGray = (int)(bAve + gAve + rAve) / 3 # 2. 計算各通道增益係數,並使用此係數計算結果 bCoef = aveGray / bAve gCoef = aveGray / gAve rCoef = aveGray / rAve imgB = np.floor((imgB * bCoef)) # 向下取整 imgG = np.floor((imgG * gCoef)) imgR = np.floor((imgR * rCoef)) # 3. 變換後處理 # 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) # 將原文第3部分的演算法做修改版,加快速度 imgb = imgB imgb[imgb > 255] = 255 imgg = imgG imgg[imgg > 255] = 255 imgr = imgR imgr[imgr > 255] = 255 cold_rgb = np.dstack((imgb, imgg, imgr)).astype(np.uint8) print("Cold color:") print(cold_rgb.shape) show_img(cold_rgb)
我們所說的冷、暖色調,其實就是色溫變化的結果, 而色溫的變化,通常也就伴隨著「白平衡的破壞」。
一個白平衡的圖片,色調並不會明顯偏冷或偏暖, 但因為人類視覺上的觀感,有時我們能透過色調使圖片更有特色。
例如:
想呈現「冷酷、冰冷」的照片,適合使用冷色調。 想呈現「溫暖、熱情」的照片,適合使用暖色調。 -> 關於修改演算法的部分: 原文的演算法使用兩層for迴圈進行計算, 但既然都使用了numpy矩陣,使用矩陣算法才是更有效率的方式, 因此才有修改版的寫法,如果讀者有興趣可以自行試試執行時間的差距。
調整色調、色溫(白平衡)
白平衡: 讓實際環境中白色的物體在你拍攝的畫面中也呈現出“真正”的白色。不同性質的光源會在畫面中產生不同的色彩傾向,比如說,蠟燭的光線會使畫面偏橘黃色,而黃昏過後的光線則會為景物披上一層藍色的冷調。而我們的視覺系統會自動對不同的光線作出補償,所以無論在暖調還是冷調的光線環境下,我們看一張白紙永遠還是白色的。但相機則不然,它只會直接記錄呈現在它面前的色彩,這就會導致畫面色彩偏暖或偏冷。
破壞白平衡: 使圖像偏暖或者偏冷。
思路 白平衡的思想是將三原色的成分比例變得近似相同 而破壞白平衡則相反,增大b分量所占比例實現冷色調,增大r分量所占比例實現暖色調。
我們所說的冷、暖色調,其實就是色溫變化的結果, 而色溫的變化,通常也就伴隨著「白平衡的破壞」。
一個白平衡的圖片,色調並不會明顯偏冷或偏暖, 但因為人類視覺上的觀感,有時我們能透過色調使圖片更有特色。
例如:
想呈現「冷酷、冰冷」的照片,適合使用冷色調。 想呈現「溫暖、熱情」的照片,適合使用暖色調。 -> 關於修改演算法的部分: 原文的演算法使用兩層for迴圈進行計算, 但既然都使用了numpy矩陣,使用矩陣算法才是更有效率的方式, 因此才有修改版的寫法,如果讀者有興趣可以自行試試執行時間的差距。