OpenCV-Python直方圖均衡化實現圖像去霧

直方圖均衡化

直方圖均衡化的目的是將原始圖像的灰度級均勻地映射到整個灰度級范圍內,得到一個灰度級分佈均衡的圖像。這種均衡化,即實現瞭灰度值統計上的概率均衡,也實現瞭人類視覺系統上(HSV)的視覺均衡。

一般來說,直方圖均衡化可以達到增強圖像顯示效果的目的。最常用的比如去霧。下面,我們來分別實現灰度圖像去霧以及彩色圖像去霧。

實現灰度圖像去霧

在OpenCV中,它提供瞭函數cv2.equalizeHist()來實現直方圖均衡化,該函數的完整定義如下:

def equalizeHist(src, dst=None):

src:原始圖像,必須是8位單通道原始圖像

dst:返回值,返回直方圖均值化處理結果

下面,我們來通過該函數實現灰度圖像直方圖均衡化處理,代碼如下:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("45.jpg", 0)
equ = cv2.equalizeHist(img)

cv2.imshow("1",img)
cv2.imshow("2",equ)
plt.figure("原始圖像直方圖")
plt.hist(img.ravel(), 256)
plt.figure("均衡化圖像直方圖")
plt.hist(equ.ravel(), 256)
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

運行之後,效果如下:

在這裡插入圖片描述

左邊為原圖,右邊是處理後的圖像,可以看到圖像前景的霧,基本已經去掉瞭。不過,我們還是看看處理前後的直方圖結果分佈。

原始圖像

處理後的圖像

實現彩色圖像去霧

雖然上面的灰度圖像達到瞭去霧的基本效果,但是說實話,大多數實際的場景中,我們用到最多的往往是彩色圖像。所以,掌握彩色圖像的直方圖均衡化處理,才是我們真正的實戰技能。

下面我們來用代碼實現彩色圖像直方圖均衡化處理,代碼如下:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("50.jpg")

blue = img[:, :, 0]
green = img[:, :, 1]
red = img[:, :, 2]
blue_equ = cv2.equalizeHist(blue)
green_equ = cv2.equalizeHist(green)
red_equ = cv2.equalizeHist(red)
equ = cv2.merge([blue_equ, green_equ, red_equ])

cv2.imshow("1",img)
cv2.imshow("2",equ)
plt.figure("原始圖像直方圖")
plt.hist(img.ravel(), 256)
plt.figure("均衡化圖像直方圖")
plt.hist(equ.ravel(), 256)
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

這裡,我們隻需要使用equalizeHist()函數對彩色圖像的每個顏色進行均衡化處理即可。當然,需要註意的是,我們處理完每個顏色之後,需要將圖像再次合並。運行之後效果如下:

彩色圖像處理

到此這篇關於OpenCV-Python直方圖均衡化實現圖像去霧的文章就介紹到這瞭,更多相關OpenCV-Python 圖像去霧內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!