1. 程式人生 > >opencv之影象直方圖均衡化cv2.equalizeHist

opencv之影象直方圖均衡化cv2.equalizeHist

目錄

一、影象直方圖

二、繪製直方圖

三、直方圖均衡化

四、直方圖均衡化效果展示


 

一、影象直方圖

  影象的構成是有畫素點構成的,每個畫素點的值代表著該點的顏色(灰度圖或者彩色圖)。所謂直方圖就是對影象的中的這些畫素點的值進行統計,得到一個統一的整體的灰度概念直方圖的好處就在於可以清晰瞭解影象的整體灰度分佈,這對於後面依據直方圖處理影象來說至關重要。

一般情況下直方圖都是灰度影象,直方圖x軸是灰度值(一般0~255),y軸就是影象中每一個灰度級對應的畫素點的個數。

 

二、繪製直方圖

①利用cv2.calcHist()

  • 函式原型:cv2.calcHist(image,channels,mask,histSize,ranges)
  • image為待計算直方圖的影象,需用[]包裹
  • channels指定待計算直方圖的影象的哪一通道用來計算直方圖,RGB影象可以指定[0,1,2],灰度影象只有[0],需用[]包裹,
  • mask為掩碼,可以指定影象的範圍,如果是全圖,預設為none
  • hitsize為直方圖的灰度級數,例如[0,255]一共256級,故引數為256,需用[]包裹
  • range為畫素值範圍,為[0,255]
  • 返回值為hist,直方圖;接著使用
    matplotlib.pyplot.plot(hist,color)進行繪製
hist = cv2.calcHist([res],[0],None,[256],[0,255])
plt.plot(hist,'r')
plt.show()

 

②使用plt.hist(),進行繪製

plt.hist(img,ravel(),hitsizes,ranges,color=)

  • img.ravel()將原影象的array陣列轉成一維的陣列
  • hitsizes為直方圖的灰度級數
  • ranges為灰度範圍[0,255]
  • color是引數,需要使用color=''來指定顏色
plt.hist(res.ravel(), 256, [0, 256],color='r')
plt.show()

 

三、直方圖均衡化

影象的直方圖是對影象對比度效果上的一種處理,旨在使得影象整體效果均勻,黑與白之間的各個畫素級之間的點更均勻一點。 

通過這種方法,亮度可以更好地在直方圖上分佈。這樣就可以用於增強區域性的對比度而不影響整體的對比度,直方圖均衡化通過有效地擴充套件常用的亮度來實現這種功能。

這種方法對於背景和前景都太亮或者太暗的影象非常有用,這種方法尤其是可以帶來X光影象中更好的骨骼結構顯示以及曝光過度或者曝光不足照片中更好的細節

①實現方法

利用

cv2.equalizeHist(img),將要均衡化的原影象【要求是灰度影象】作為引數傳入,則返回值即為均衡化後的影象。

原影象直方圖

res = cv2.equalizeHist(res)

處理後的直方圖

 

 

四、直方圖均衡化效果展示