您好,登錄后才能下訂單哦!
小編給大家分享一下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直方圖均衡化如何實現圖像去霧”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。