opencv直方图均衡包含两种,一种是对全图进行直方图均衡,另一种是对局部进行直方图均衡,也称为自适应直方图均衡。直方图均衡是让图像的像素分布更加均匀,一般可以使图片更亮、解决偏色问题、增加局部细节等。
1 全局直方图均衡
全局直方图均衡的函数为cv2.equalizeHist(img)。示例代码如下:
import cv2
if __name__ == '__main__':
image = cv2.imread('lena.jpg', 0)
eh = cv2.equalizeHist(image)
cv2.imshow('image', image)
cv2.imshow('eh', eh)
cv2.waitKey(0)
效果如下图所示,可见处理后图片亮度和局部细节都有明显增加。
2 自适应直方图均衡
自适应直方图均衡的函数为cv2.createCLAHE(clipLimit=8.0, titeGridSize=(8, 8)) ,clipLimit颜色对比度的阈值。tileGridSize进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作。
通过实验对比,clipLimit越大表示局部细节对比度越明显。
tileGridSize越大图片越亮,过大会导致细节丢失。
示例代码如下:
import cv2
if __name__ == '__main__':
image = cv2.imread('lena.jpg', 0)
cla = cv2.createCLAHE(clipLimit=8.0, tileGridSize=(8, 8)).apply(image)
print(cla.shape)
cv2.imshow('image', image)
cv2.imshow('cla', cla)
cv2.waitKey(0)
效果如下图所示,局部细节更加明显。
tileGridSize=8
tileGridSize=80