cv2.createCLAHE() - 自适应均衡化图像 -- OpenCV



直方图均衡化:一般可以用来提升图片的亮度



1. cv2.equalizeHist (进行直方图均衡化) 

2. cv2.createCLAHA (用于生成自适应均衡化图像)


cv2.equalizeHist(img)  

表示进行直方图均衡化


参数说明:

  • img 表示输入的图片


import cv2
import numpy as np
import matplotlib.pyplot as plt

# 第一步:读入图片
img = cv2.imread('lena.jpeg', 0)

# 第二步: 使用 cv2.equalizeHist 实现像素点的均衡化
ret = cv2.equalizeHist(img)

# 第三步:使用 plt.hist 绘制像素直方图
plt.subplot(121)
plt.hist(img.ravel(), 256)
plt.subplot(122)
plt.hist(ret.ravel(), 256)
plt.show()

# 第四步:使用 cv2.imshow() 绘值均衡化的图像
cv2.imshow('ret', np.hstack((img, ret)))
cv2.waitKey(0)



这种全局的均衡化也会存在一些问题,由于整体亮度的提升,也会使得局部图像的细节变得模糊,因为我们需要进行分块的局部均衡化操作.





cv2.createCLAHA(clipLimit, titleGridSize) 

用于生成自适应均衡化图像


参数说明:

  • clipLimit 颜色对比度的阈值
  • titleGridSize 进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作


代码:

  • 第一步:使用 cv2.createCLAHE(clipLimit=2.0, titleGridSize=(8, 8)) 实例化均衡直方图函数
  • 第二步:使用 .apply 进行均衡化操作
  • 第三步:进行画图操作

# 使用自适应直方图均衡化
# 第一步:实例化自适应直方图均衡化函数
clahe = cv2.createCLAHE(clipLimit=2.0,
                        tileGridSize=(8, 8))

# 第二步:进行自适应直方图均衡化
clahe = clahe.apply(img)

# 第三步:进行图像的展示
cv2.imshow('imgs', np.hstack((img, ret, clahe)))
cv2.waitKey(0) 
cv2.destroyAllWindows()


可以看出自适应均衡化没有使得人物脸部的细节消失





reference

https://www.cnblogs.com/my-love-is-python/p/10405811.html