【OpenCV-Python-课程学习(贾)】OpenCV3.3课程学习笔记:直方图均衡化(equalizeHist)、生成自适应均衡化图(createCLANE),增强图像对比度+像素强度分布均匀

一、直方图均衡化的意义

  1. 增强图像对比度、使图像辨识度提高
  2. 像素强度分布更加均衡,而不是整体趋暗或明

二、OpenCV中的equalizeHist函数

参考资料python+opencv直方图均衡化_我是小蚂蚁的博客-CSDN博客_opencv 直方图均衡化

 

2.1 灰度图

对于灰度图的直方图均衡化,直接用equalizeHist()即可。

equalizeHist()函数的用法非常简单,直接传入单通道图像即可。

2.2 彩色图

如果想要对彩色图进行均衡化,可以先用OpenCV的split函数拆分成多个通道,接着分别将各个通道的数组传入equalizeHist(),最后再用merge函数合并成一个彩色图。

2.3 YCC均衡化

对彩色图像的另一种均衡化方法,就是先用cvtColor函数(参数mode等于cv.COLOR_BGR2YCrCb)转成YCC颜色模式的图像,然后再用split函数划分成多个通道,将第一个通道(亮度/明度)传入equalizeHist(),最后再用merge函数将第一个通道的新数组和其他通道的数组合并成一个彩色图。

三、生成自适应均衡化图像(cv.createCLANE)

第二部分的equalizeHist()函数功能是“全局均衡化”。

全局均衡化API虽然简单易用,但是存在一些问题。

由于整体亮度的提升,图像的部分细节变得模糊,这时候我们可以尝试进行分块的局部均衡化操作。

自适应均衡化,最适合用来对直方图有多个峰值区域的图像;而全局均衡化,适合只有一个峰值区域的图像。

createCLANE的语法格式如下

cv.createCLAHE([, clipLimit[, tileGridSize]]) ->retval

  • clipLimit是对比度阈值,生成的图像对比度不能太高;默认的阈值是40.0。
  • tileGridSize表示图像的行列分块数;因为自适应均衡化是先将图像按tileGridSize进行行列划分,得到n*m块子图后分别进行均衡化;行列分块数越大,均衡化越细致;默认的尺寸是(8, 8)。
  • retval是函数返回值,代表一个类的实例;我们要向实现均衡化,还需要用到这个类实例的方法——apply(img)。

你可能感兴趣的:(OpenCV,python,opencv,计算机视觉)