1.基本概念
直方图是图像的一个重要统计特征。
直方图均衡化可以调整图像对比度,是图像增强的一个手段。
直方图均衡化又可分为全局直方图均衡化和局部自适应均衡化。
openCV的直方图均衡化都是基于灰度图的。
2.API 介绍
- (1)全局直方图均衡化
cv2.equalizeHist(src: Any, dst: Any = None)
src: 必须为灰度图像
全局的均衡化会存在一些问题,由于整体亮度的提升,会使得局部图像的细节变得模糊,因为我们需要进行分块的局部均衡化操作
- (2)局部自适应直方图均衡化
cv2.createCLAHE(clipLimit: Any = None, tileGridSize: Any = None)
clipLimit: 颜色对比度的阈值
titleGridSize: 进行均衡化的网格大小
3.代码示例
import cv2
car = cv2.imread('E:/PycharmProjects/gray.jpg')
from matplotlib import pyplot as plt
def show(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
show('img', car)
# 1.全局直方图均衡化
def equalhist_img(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.hist(gray.ravel(), 256, [0, 256]) # ravel功能是将多维数组降为一维数组
plt.show()
dst = cv2.equalizeHist(gray)
show('equalhist', dst)
plt.hist(dst.ravel(), 256, [0, 256])
plt.show()
equalhist_img(car)
# 2.局部直方图均衡化
def clahe_demo(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.hist(gray.ravel(), 256, [0, 256]) # ravel功能是将多维数组降为一维数组
plt.show()
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(3, 3))
dst = clahe.apply(gray)
show('clahe', dst)
plt.hist(dst.ravel(), 256, [0, 256])
plt.show()
clahe_demo(car)
cv2.destroyAllWindows()
4.结果展示