包括圖像反轉、對數變換、冪律(伽馬)變換、分段線性變換函數,測試圖選的不咋地
import cv2 import numpy as np #灰度圖反轉 def grayReversal(gray): gray_reversal = 255 - gray #灰度圖反轉 return gray_reversal #彩色圖像反轉 def imgReversal(img): img_reversal = np.zeros(img.shape, np.uint8)#初始模板 for i in range(img.shape[0]): for j in range(img.shape[1]): b, g, r = img[i, j] #注意是bgr,不是rgb img_reversal[i, j] = 255 - b, 255 - g, 255 - r return img_reversal #對數變換 def logTrans(gray, c): gray_log = np.uint8((c * np.log(1.0 + gray))) return gray_log #冪律(伽馬)變換 def powerTrans(gray, c, y): gray_power = np.uint8(c * (gray ** y)) return gray_power path = "_kdy.jpg" img = cv2.imread(path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉換為灰度圖 gray_reversal = grayReversal(gray) img_reversal = imgReversal(img) gray_log = logTrans(gray, c=30) gray_power = powerTrans(gray, c=30, y =0.35) cv2.imshow("img", img) cv2.imshow("gray", gray) cv2.imshow("gray_reversal", gray_reversal) cv2.imshow("img_reversal", img_reversal) cv2.imshow("gray_log", gray_log) cv2.imshow("gray_power", gray_power) cv2.waitKey(0)
(圖分別為原圖、灰度圖、灰度反轉圖、對數變換圖、冪律(伽馬)變換圖)
————————————————————————————————————
分段線性變換函數
就是用拉格朗日插值法實現分段線性變換函數,然后,注意數據類型的轉換就完事了,可用來對比度拉伸和灰度級分層
import cv2 import numpy as np #拉格朗日插值法,對比度拉伸 def plf(x, X, Y): x = np.float32(x)#得把數據類型給轉換下 y = 0 for i in range(len(X)): t = 1 for j in range(len(Y)): if j != i: t = t * ((x - X[j]) / (X[i] - X[j])) y = np.uint8(y + t * Y[i])#再把數據類型換下 return y path = "_plf.jpg" img = cv2.imread(path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉換為灰度圖 #參數設置 X = [0, 60, 190, 255] Y = [0, 30, 230, 255] gray_plf = plf(gray, X, Y) cv2.imshow("gray", gray) cv2.imshow("gray_plf", gray_plf) cv2.waitKey(0)
左圖是灰度圖,右圖是對比圖拉伸圖