python實現圖像自動Gamma校訂-SDK社區

關於Gamma:

Gamma校訂是對動態範圍內亮度的非線性存儲/還原算法,即輸入值進行的非線性操做,使輸出值與輸入值呈指數關係;從效果上來講Gamma校訂調整圖像的總體亮度,沒有校訂的圖像看起來可能會存在過亮或太暗的狀況,因此想要圖像顯示效果更完美,Gamma校訂就顯得很重要了。 Gamma矯正的計算過程以下:前端

`output=〖input〗^(1/Gamma)`

使用上面的指數函數把每一個像素的RGB值進行變換。具體執行下列轉換公式(假定像素值的取值範圍爲0到255):python

`R=〖255X(R/255)〗^((1/gamma))
G=〖255X(G/255)〗^((1/gamma))
B=〖255X(B/255)〗^((1/gamma))`

通常處理Gamma矯正都是經過手動調節gamma值來完成的,但若是圖片多的狀況下,手動設置gamma值顯得過於麻煩,這時候就須要採用自動Gamma矯正,將RGB圖片轉成灰度圖,計算灰度圖的數據均值,經過下面的計算公式計算gamma值。算法

`gamma_val = math.log10(0.5) / math.log10(mean / 255)`

python實現:

import cv2
import numpy as np
import math
import os

def gamma_trans(img, gamma):  # gamma函數處理
    gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]  # 創建映射表
    gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)  # 顏色值爲整數
    return cv2.LUT(img, gamma_table)  # 圖片顏色查表。另外能夠根據光強(顏色)均勻化原則設計自適應算法。

def nothing(x):
    pass

data_base_dir = r'./1'  # 輸入文件夾的路徑
outfile_dir = r'./2'  # 輸出文件夾的路徑

list = os.listdir(data_base_dir)
list.sort()
list2 = os.listdir(outfile_dir)
list2.sort()
for file in list:  # 遍歷目標文件夾圖片
    read_img_name = data_base_dir + '/' + file.strip()  # 取圖片完整路徑
    image = cv2.imread(read_img_name)  # 讀入圖片
    img_gray = cv2.imread(read_img_name, 0)  # 灰度圖讀取,用於計算gamma值

    mean = np.mean(img_gray)
    gamma_val = math.log10(0.5) / math.log10(mean / 255)  # 公式計算gamma

    image_gamma_correct = gamma_trans(image, gamma_val)  # gamma變換

    out_img_name = outfile_dir + '/' + file.strip()
    cv2.imwrite(out_img_name, image_gamma_correct)
    print("The photo which is processed is {}".format(file))

原文連接:https://www.sdk.cn/details/veYqE8z9ZReZb7Wj4Qapi

SDK社區是一箇中立的社區,這裏有多樣的前端知識,有豐富的api,有愛學習的人工智能開發者,有風趣幽默的開發者帶你學python,還有將來火熱的鴻蒙,當各類元素組合在一塊兒,讓咱們一塊兒腦洞大開共同打造專業、好玩、有價值的開發者社區,幫助開發者實現自我價值!函數

相關文章
相關標籤/搜索