圖片是由像素點矩陣組成的,對圖片的操作即為對像素點矩陣的操作。只要在這個像素點矩陣中找到這個像素點的位置,比如第x行,第y列,所以這個像素點在這個像素點矩陣中的位置就可以表示成(x,y),因為一個像素點的顏色由紅、綠、藍三個顏色變量表示(R,G,B),所以我們通過給這三個變量賦值,來改變這個像素點的顏色。
1:讀入正常圖片進行圖片灰度處理
import cv2,copy, math #讀入原始圖像 img = cv2.imread('1.jpg') #灰度化處理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imwrite("2.jpg", gray)
效果比對:
圖片的灰度化:將一個像素點的三個顏色變量相等,R=G=B,此時該值稱為灰度值
2:對灰度圖像進行二值化處理
# 二值化處理 ret, im_fixed = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY) cv2.imwrite("3.jpg", im_fixed)
二值化處理:將一個像素點的值突出為0,255,使得圖片呈現黑白兩種顏色。在灰度圖像中像素值在0~255,二值化后圖像中像素值為0或255。
CV_THRESH_BINARY, //表示如果當前像素點的灰度值大於閾值(50)則將輸出圖像的對應位置像素值置為255,否則為0
結果如下:
3:對灰度圖像進行伽馬變換
gamma = copy.deepcopy(gray) rows = img.shape[0] cols = img.shape[1] for i in range(rows): for j in range(cols): gamma[i][j] = 3*pow(gamma[i][j], 0.6) cv2.imwrite("4.jpg", gamma)
伽馬變換:用於圖像增強,提升了暗部細節,簡單來說就是通過非線性變換,讓圖像從暴光強度的線性響應變得更接近人眼感受的響應,即將漂白(相機曝光)或過暗(曝光不足)的圖片,進行矯正。
伽馬值小於1時,會拉伸圖像中灰度級較低的區域,同時會壓縮灰度級較高的部分
伽馬值大於1時,會拉伸圖像中灰度級較高的區域,同時會壓縮灰度級較低的部分
結果如下:
4:對灰度圖像進行反色或者對數變換
對數變換:由於對數曲線在像素值較低的區域斜率大,在像素值較高的區域斜率較小,所以圖像經過對數變換后,較暗區域的對比度將有所提升。可用於增強圖像的暗部細節.。
反色變換:對原圖像像素值的顏色進行反轉,即黑色變為白色,白色變為黑色。
# 對灰度圖像進行對數變換 logc = copy.deepcopy(gray) for i in range(rows): for j in range(cols): logc[i][j] = 3 * math.log(1 + logc[i][j]) cv2.imwrite("5.jpg", logc) # 對灰度圖像進行反色變換 cover = copy.deepcopy(gray) for i in range(rows): for j in range(cols): cover[i][j] = 255 - cover[i][j] cv2.imwrite("6.jpg", cover)
結果如下:
(反色變換)
(對數變換)
常用五種灰度圖像處理方式:
# 超過閾值部分取maxval(最大值),否則取0
ret,thresh1 = cv2.threshold(gray_cat,127,255,cv2.THRESH_BINARY)
# THRESH_BINARY 的反轉
ret,thresh2 = cv2.threshold(gray_cat,127,255,cv2.THRESH_BINARY_INV)
# 大於閾值的部分設為閾值,否則不變
ret,thresh3 = cv2.threshold(gray_cat,127,255,cv2.THRESH_TRUNC)
# 大於閾值的部分不改變,否則設為0
ret,thresh4 = cv2.threshold(gray_cat,127,255,cv2.THRESH_TOZERO)
# THRESH_TOZERO 的反轉
ret,thresh5 = cv2.threshold(gray_cat,127,255,cv2.THRESH_TOZERO_INV)