目錄
1 灰度圖
2 最大值法
3 平均值法
4 加權均值法
5 兩個極端的灰度值
將彩色圖轉為灰度圖地過程稱為灰度化。
灰度圖是單通道圖像,灰度化本質就是將彩色圖的三通道合并成一個通道的過程。三種合并方法:最大值法,平均值法和加權均值法。
1 灰度圖
灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑色與白色兩種顏色;但是,灰度圖像在黑色與白色之間還有許多級的顏色深度。灰度圖像經常是在單個電磁波頻譜如可見光內測量每個像素的亮度得到的,用于顯示的灰度圖像通常用每個采樣像素8位的非線性尺度來保存,這樣可以有256級灰度。
2 最大值法
從彩色圖像的R、G、B三個通道的值中選出最大的一個作為灰度圖像中對應位置的像素值。
例如某圖像中某像素點的像素值如上圖所示,那么在使用最大值法進行灰度化時,就會從該像素點對應的RGB通道中選取最大的像素值作為灰度值,所以在灰度圖中的對應位置上,該像素點的像素值就是121。
案例:
import cv2 as cv
import numpy as np
# 灰度化:最大值法:圖像大小不變,像素點個數不變,通道數由3變1,像素值會變,變成三個通道里的最大值
pig = cv.imread("../day02/images/pig.png")
# 獲取原圖大小,形狀
h,w,_ = pig.shape
# 創建一個和原圖一樣大小的圖像,放像素,拿這張圖就是灰度化后的圖
gray = np.zeros((h,w),dtype=np.uint8)
# 遍歷原圖,取出每個像素點,拿到三個通道里面的最大像素值,放進創建的圖像里面
# 遍歷行
for i in range(h):# 遍歷列for j in range(w):# 取出每個像素點 img[i,j] [200,200,99]# gray[i,j] = max(pig[i,j][0],pig[i,j][1],pig[i,j][2])gray[i,j]=max(pig[i,j])
# 顯示圖像,看看效果
cv.imshow("pig",pig)
cv.imshow("gray",gray)
cv.waitKey(0)
cv.destroyAllWindows()
輸出:
![]() | ![]() |
原圖 | 灰度圖(最大值法) |
3 平均值法
從彩色圖像的R、G、B三個通道取平均值作為灰度圖像中對應位置的像素值。
例如某圖像中某像素點的像素值如上圖所示,那么在使用平均值進行灰度化時,其計算結果就是(91+121+46)/3=86(對結果進行取整),所以在灰度圖中的對應位置上,該像素點的像素值就是86。
案例:
import cv2 as cv
import numpy as np
# 灰度化:最大值法:圖像大小不變,像素點個數不變,通道數由3變1,像素值會變,變成三個通道里的最大值
pig = cv.imread("../day02/images/pig.png")
# 獲取原圖大小,形狀
h,w,_ = pig.shape
# 創建一個和原圖一樣大小的圖像,放像素,拿這張圖就是灰度化后的圖
gray = np.zeros((h,w),dtype=np.uint8)
# 遍歷原圖,取出每個像素點,拿到三個通道里面的最大像素值,放進創建的圖像里面
# 遍歷行
for i in range(h):# 遍歷列for j in range(w):gray[i,j] = np.uint8(((int(pig[i,j,0])+int(pig[i,j,1])+int(pig[i,j,2]))//3)) # 使用int()是為了防止np.uint8溢出,最后再轉回去即可
# 取出每個像素點 img[i,j] [200,200,99]
# 顯示圖像
cv.imshow("pig",pig)
cv.imshow("gray",gray)
print(pig.shape,gray.shape)
cv.waitKey(0)
cv.destroyAllWindows()
輸出:
![]() | ![]() |
原圖 | 灰度圖(平均值法) |
4 加權均值法
彩色圖像每個通道乘以一定的權重在相加得到灰度圖像對應位置的像素值。
例如某圖像中某像素點的像素值如上圖所示,那么在使用加權平均值進行灰度化時,其計算結果就是10*0.299+121*0.587+46*0.114=79。所以在灰度圖中的對應位置上,該像素點的像素值就是79。
案例:
import cv2 as cv
import numpy as np
# 灰度化:最大值法:圖像大小不變,像素點個數不變,通道數由3變1,像素值會變,變成三個通道里的最大值
pig = cv.imread("../day02/images/pig.png")
# 獲取原圖大小,形狀
h,w,_ = pig.shape
# 定義三個通道上的權重
wr = 0.299
wg = 0.587
wb = 0.114
# 創建一個和原圖一樣大小的圖像,放像素,拿這張圖就是灰度化后的圖
gray = np.zeros((h,w),dtype=np.uint8)
# 遍歷原圖,取出每個像素點,拿到三個通道里面的最大像素值,放進創建的圖像里面
# 遍歷行
for i in range(h):# 遍歷列for j in range(w):# 取出每個像素點 img[i,j] [200,200,99]# R:0.299 G:0.587 B:0.114gray[i,j] = round(pig[i,j,0]*wb + pig[i,j,1]*wg + pig[i,j,2]*wr)
# 顯示圖像
cv.imshow("pig",pig)
cv.imshow("gray",gray)
print(pig.shape,gray.shape)
cv.waitKey(0)
cv.destroyAllWindows()
輸出:
![]() | ![]() |
原圖 | 灰度圖(加權均值法) |
5 兩個極端的灰度值
在灰度圖像中,“極端”的灰度值指的是亮度的兩個極端:最暗和最亮的值。
-
最暗的灰度值:0。這代表完全黑色,在灰度圖像中沒有任何亮度。
-
最亮的灰度值:255。這代表完全白色,在灰度圖像中具
![]() | ![]() |
---|---|
灰度值為0(純黑) | 灰度值為255(純白) |