先來認識一下灰度直方圖,灰度直方圖是圖像灰度級的函數,用來描述每個灰度級在圖像矩陣中的像素個數或者占有率。接下來使用程序實現直方圖:
首先導入所需的程序包:
In?[?]:
import?cv2
import?numpy as?np
import?matplotlib.pyplot as?plt
定義計算灰度直方圖的函數:
In?[?]:
def?calcGrayHist(I):
????# 計算灰度直方圖
????h, w =?I.shape[:2]
????grayHist =?np.zeros([256], np.uint64)
????for?i in?range(h):
????????for?j in?range(w):
????????????grayHist[I[i][j]] +=?1
????return?grayHist
讀取一張圖片:
In?[?]:
img =?cv2.imread('./street.jpg')
img2 =?cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img2)
plt.show()
繪制灰度直方圖:
In?[?]:
grayHist =?calcGrayHist(img)
x =?np.arange(256)
plt.plot(x, grayHist, 'r', linewidth=2, c='black')
plt.xlabel("gray Label")
plt.ylabel("number of pixels")
plt.show()
圖像的對比度是通過灰度級范圍來度量的,而灰度級范圍可通過觀察灰度直方圖得到,灰度級范圍越大代表對比度越高;反之對比度越低,低對比度的圖像在視覺上給人的感覺是看起來不夠清晰,所以通過算法調整圖像的灰度值,從而調整圖像的對比度是有必要的。最簡單的一種對比度增強的方法是通過灰度值的線性變換實現的。