更多內容,請參考http://www.cnblogs.com/Undo-self-blog/p/8439149.html
直方圖均衡化可以將像素值分布的區域更廣泛,在Python語言下,OpenCV提供的直方圖均衡化函數有直接均衡化equalizeHist和自適應的均衡化createCLAHE,自適應的均衡化函數將整幅圖像會被分成很多小塊,然后再對每一個小塊分別進行直接直方圖均衡化。圖像采用2種方法處理后的效果分別如中下、右下圖所示。從效果上看,直接均衡化對比度太大,自適應直方圖均衡化效果比較好。


三幅圖像對應的直方圖如下



有時候,使用直接均衡化的效果不是好不好的問題,而是。。。不好描述,直接看下圖結果


而使用自適應均衡化一般不會出現這種情況,效果如下圖

代碼如下,IDE其中使用pyChar,data文件夾與.py文件在同一個文件夾下。
import cv2 as cv2
import numpy as np
import matplotlib.pyplot as plt
imgOrigin = cv2.imread('data/1.png', cv2.CV_16UC1)
imgEqualizeHist = cv2.equalizeHist(imgOrigin)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
imgCLAHE = clahe.apply(imgOrigin)
cv2.imshow('origin', imgOrigin)
cv2.imshow('equalizeHist', imgEqualizeHist)
cv2.imshow('createCLAHE', imgCLAHE)
plt.ylim(0,10000)
plt.hist(imgOrigin.ravel(),256,[0,256]); plt.show()
plt.ylim(0,10000)
plt.hist(imgEqualizeHist.ravel(),256,[0,256]); plt.show()
plt.ylim(0,10000)
plt.hist(imgCLAHE.ravel(),256,[0,256]); plt.show()
cv2.waitKey(0)
