OpenCV-Python自适应直方图均衡类CLAHE及方法详解

opencv- CLAHE 有限对比适应性直方图均衡化 阅读详情
AI摘要

本文详细介绍了OpenCV-Python中用于对比度受限自适应直方图均衡的CLAHE类,包括其属性、方法以及如何构建和使用CLAHE对象。CLAHE主要通过apply方法对图像进行处理,参数clipLimit和tilesGridSize分别控制对比度和图像分块。创建CLAHE对象需通过createCLAHE函数,而非直接构造。示例代码展示了CLAHE对象的使用,包括属性读写和图像处理过程。

一、引言

对比度受限的自适应直方图均衡在OpenCV中是通过类CLAHE来提供实现的,老猿没研究过C++中的应用,但OpenCV-Python中应用时与普通的Python类构建对象的机制有所不同,老猿做了相关测试,在此简单介绍一下。

二、CLAHE类及方法介绍

2.1、简介

CLAHE类是OpenCV中进行对比度受限的自适应直方图均衡的基类,其类继承关系如下:
在这里插入图片描述
其父类和子类老猿没有研究过,在此就不展开介绍。

该类有2个重要属性:

  • tilesGridSize:图像被分成称为“tiles”(瓷砖、地砖、小方地毯、片状材料、块状材料)的小块,在OpenCV中,tilesGridSize默认为8x8 ,即整个图像被划分为8纵8横共64块。然后对每一个块进行直方图均衡处理
  • clipLimit:裁剪限制,此值与对比度受限相对应,对比度限制这个参数是用每块的直方图的每个bins的数和整图的平均灰度分布数的比值来限制的。 裁剪则是将每块图像直方图中超过ClipLimit的bins多出的灰度像素数去除超出部分,然后将所有bins超出的像素数累加后平均分配到所有bins。具体算法老猿将在研究清楚后单独介绍。
2.2、成员方法简介
2.2.1、apply方法

apply方法用于对图像应用对比度受限自适应直方图均衡变换处理。
调用语法: dst = cv.CLAHE.apply( src[, dst] )
参数说明:

  • src:输入图像,图像类型为CV_8UC1 or CV_16UC1,即8位或16位灰度图
  • dst:输出图像,类型同输入图像

补充说明:在进行该方法调用前,必须已经设置了对比度受限自适应直方图均衡算法的受限对比度ClipLimit以及图像分块的行数和列数tiles

2.2.2、collectGarbage方法

collectGarbage方法应该是进行内存垃圾回收的,没有参数和返回值,老猿认为由于Python的内存管理机制,该方法没有什么意义,同时测试没有发现执行该方法起何作用,因此很可能是个无用的方法。

2.2.3、getClipLimit方法

getClipLimit方法是用于获取当前CLAHE对象设置的ClipLimit值返回。
调用语法: retval = cv.CLAHE.getClipLimit()

2.2.4、getTilesGridSize方法

getClipLimit方法是用于获取当前CLAHE对象设置的tilesGridSize返回。
调用语法: retval = cv.CLAHE.getTilesGridSize()

2.2.5、setClipLimit方法

方法是用于设置当前CLAHE对象的ClipLimit值,无返回值。

调用语法: None = cv.CLAHE.setClipLimit( clipLimit )

2.2.6、setTilesGridSize方法

方法是用于设置当前CLAHE对象的tilesGridSize值,无返回值。

调用语法: None = cv.CLAHE.setTilesGridSize( tileGridSize )

三、CLAHE对象的构建

3.1、CLAHE构造方法研究

从上面的方法介绍中,没有看到CLAHE的构造方法,在OpenCV文档中,确实没有这个CLAHE的构造方法,在Python的CLAHE.py模块中,有该类的构造方法的定义:

def __init__(self, *args, **kwargs): # real signature unknown
    pass

没有任何参数的说明,在老猿找到的该类的C++类的构造方法如下:

int CLAHE(kz_pixel_t* pImage, unsigned int uiXRes, nsigned int uiYRes, kz_pixel_t Min,      kz_pixel_t Max, unsigned int uiNrX, unsigned int uiNrY, unsigned int uiNrBins, float fCliplimit);

老猿以C++构造方法为依据构建了Python中的CLAHE类,构造方法确实返回了CLAHE对象,但以此调用相关方法全部出现代码异常退出。基本上说明OpenCV-Python中CLAHE的构造方法不可用,至于C++中是否能使用,老猿没有去研究。

3.2、createCLAHE函数

由于OpenCV-Python中CLAHE的构造方法无法使用,同时在OpenCV中,提供了单独的全局函数createCLAHE,因此OpenCV-Python中CLAHE对象的构建必须通过createCLAHE函数。

调用语法:retval = cv.createCLAHE( clipLimit=40,tileGridSize=(8,8))
参数及返回值说明:clipLimit、tileGridSize请参考前面关于类的介绍,返回值为创建的类对象,该对象的clipLimit、tileGridSize由createCLAHE函数的参数指定。

四、示例代码

下面的代码使用OpenCV-Python对读入的图像进行对比度受限自适应直方图均衡处理:

import cv2
def testLocalHistEqu():
    img = readImgFile(r'f:\pic\valley.png', True)
    
    print('\033[31m老猿Python网址:\033[34mhttps://blog.youkuaiyun.com/LaoYuanPython\033[0m,同名微信公众号:\033[34m老猿Python')

    clahe = cv2.createCLAHE(clipLimit=200, tileGridSize=(5, 5))
  
    cl2 = clahe.getClipLimit()
    clahe.setClipLimit(20)
    cl1 = clahe.getClipLimit()
    clahe.setTilesGridSize((8,8))

    imgEquA = clahe.apply(img)

上面的代码中创建CLAHE对象后,对对象的属性进行了读写操作,其实这些代码完全没有必要。

五、小结

本文介绍了OpenCV-Python对比度受限自适应直方图均衡变换的CLAHE类及其方法,并通过代码介绍了相关方法的使用。在单图像的对比度受限自适应直方图均衡时,只需要使用createCLAHE创建CLAHE对象,然后调用该对象apply方法就可以完成对比度受限自适应直方图均衡处理,该类的其他方法用处不大,但如果是要进行多次对比度受限自适应直方图均衡处理,且需要设置不同的分块数和受限阈值,则可以通过提供的方法直接修改对象属性再进行均衡处理即可。

更多图像直方图处理的内容请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》的介绍。

更多图像处理的内容请参考专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》、《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》及《图像处理基础知识》的介绍。

如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.youkuaiyun.com/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取优快云文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░
OpenCV 对比度受限的自适应直方图均衡化(CLAHE) C++实现 直方图均衡化(HE)是一种很常用的直方图类方法,基本思想是通过图像的灰度分布直方图确定一条映射曲线,用来对图像进行灰度变换,以达到提高图像对比度的目的。该映射曲线其实就是图像的累计分布直方图(CDF)(严格来说是呈正比例关系)。然而HE是对图像全局进行调整的方法,不能有效地提高局部对比度,而且某些场合效果会非常差。 对比度受限的自适应直方图均衡(CLAHE,Contrast Limited Ada... 阅读详情

相关推荐

OpenCV-python-03之createCLAHE生成自适应均衡化图像

1、说明 equalizeHist这种全局的均衡化也会存在一些问题,由于整体亮度的提升,也会使得局部图像的细节变得模糊,因为我们需要进行分块的局部均衡化操作。如creatCLAHE 2、代码 import cv2 img = cv2.imread('8.jpg', 0) cv2.imshow("src", img) # 直方图均衡化 dst1 = cv2.equalizeHist(img) cv2.imshow("dst1", dst1) # 自适应直方图均衡化 clahe = cv2.createC

JimmyOrigin的博客 7381

OpenCv:直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE) (附代码)

总结了使用Python OpenCv处理图像直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)的方法。

qq_40280673的博客 1万+

Python-Opencv中的直方图均衡化

Python-Opencv中的直方图均衡化 直方图均衡化 图像的直方图是对图像对比度效果上的一种处理,旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点更均匀一点。 直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽...

qq_44262417的博客 3847

【OpenCV 例程300篇】49. 直方图处理之局部直方图处理(cv2.createCLAHE)

直方图均衡和直方图匹配都是基于整幅图像的灰度分布进行全局变换,并非针对图像局部区域的细节进行增强。直方图处理对于局部同样适用,局部直方图处理的思想是基于像素邻域的灰度分布进行直方图变换处理。 OpenCV 提供了类 **cv2. createCLAHE** 用于创建自适应均衡化的对象和方法,可以实现局部直方图处理。 ...

youcans的博客 8731

基于OpenCv的图像合成和直方图均衡化

基于OpenCv的图像合成和直方图均衡化

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1405

图像增强算法小结(直方图、Gamma变换、CLAHE 和 Retinex)

这几天一直在做一个图像处理的任务,简单来说就是对一个过曝的图片进行处理,使得被亮光“遮盖”的一些细节信息显现出来。 注:我处理的是医学图像,所以某些细节问题可能不太一样(比如对RGB不考虑,全部转为灰度图) 环境:win10、python 3.6.6、Jupyter Notebook、opencv 3.4.2 相关代码已上传至个人github 一、直方图均衡化(Histogram Equaliza...

weixin_34137799的博客 4470

OpenCV基础(16)OpenCV直方图均衡化和自适应直方图均衡化(CLAHE)

在本教程中,您将学习使用OpenCV实现直方图均衡化和自适应直方图均衡化(CLAHE)。 直方图均衡化是一种基本的图像处理技术,通过更新图像直方图的像素强度分布来调整图像的全局对比度。这样做可以使低对比度的区域在输出图像中获得更高的对比度。 本质上,直方图均衡化的工作原理是: 1.计算图像像素强度的直方图 2.均匀展开并分布最频繁的像素值(即直方图中计数最大的像素值) 3.给出累积分布函数(CDF)的线性趋势 应用直方图均衡化的结果是得到一幅全局对比度更高的图像。 我们可以进一步改进直方图均衡化,采用一

weixin_43229348的博客 1万+

基于OpenCV-Python直方图均衡化——CLAHE

自适应的直方图均衡化首先将图像划分为不重叠的区域块(tiles),然后对每一个块分别进行直方图均衡化。 #histogram 直方图 # -*- coding: utf-8 -*- import cv2 import numpy as np import sys cam= cv2.VideoCapture(0) while True: ret,image=cam.read() b,g,r = cv2.split(image) clahe = cv2.createCLAHE(cl

qq_42860591的博客 2476

OpenCV-Python对比度受限的自适应直方图均衡CLAHE知识介绍

本文介绍了OpenCV-Python对比度受限的自适应直方图均衡CLAHE相关知识,可以看到CLAHE比全局直方图均衡对明暗分布不均匀的图像的改善效果更好,而进行CLAHE处理时,clipLimit值越大,对暗区域的改善效果越明显,但亮区域反而会起到反作用。

老猿Python 8640

OpenCV-Python实战(8)——直方图均衡化

图像处理技术是计算机视觉项目的核心,通常是计算机视觉项目中的关键工具,可以使用它们来完成各种计算机视觉任务。在本文中,将介绍如何使用 OpenCV 函数 cv2.equalizeHist() 执行直方图均衡,并将其应用于灰度和彩色图像,cv2.equalizeHist() 函数将亮度归一化并提高图像的对比度。

盼小辉丶的博客 2万+

Python,OpenCV直方图均衡化以提高图像对比度

这篇博客将介绍直方图均衡化以及俩种经典的方法:(全局 & 自适应直方图均衡化); 均衡化作用:1)可以提升图像的对比度;2)使所有图像具有相同的照明条件;

qq_40985985的博客 4272

OpenCV - 直方图均衡化(Python实现)

原理 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。 直方图均衡化 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('image.jpg',0) #flatten() 将...

C橘子 3万+

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6097

【OpenCV-Python】 直方图均衡化

OpenCV 直方图均衡化 直方图 直方图相关术语 BINS DIMS RANGE OpenCV中直方图的计算 Numpy中直方图的计算 绘制直方图 1. 使用Matplotlib 2. 使用OpenCV 应用遮罩 直方图均衡化 直方图均衡化算法 Numpy中的直方图均衡化 Numpy相关函数 计算累计和cumsun() 直方图均衡化 示例1:单通道的灰阶图的直方图均衡化 ...

赞美月亮的专栏 1万+

从选型到阵列:基于ESP32-S3的智能硬件麦克风系统设计实战

本文详细介绍了基于ESP32-S3芯片设计智能硬件麦克风阵列的完整实战方案。从核心芯片选型、数字MEMS麦克风的参数解读与电路设计,到关键的声学结构密封、阵列布局策略,再到利用ESP-ADF框架构建音频处理流水线并集成回声消除、噪声抑制等算法,提供了从硬件到软件的全链路设计指南与避坑要点,旨在实现清晰、稳定的远场语音交互。

weixin_29173777的博客 266

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT:MCAL层中的IO驱动组中的pin脚总体配置: Port就是芯片上的每个pin脚,可以配置成DIO ADC PWM ICU等单引脚的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他功能的单个pin脚功能; 总之,PORT就是芯片上的具体的某个引脚。 配置

zDavid_2018的博客 3万+

opencv-python 限制对比度自适应直方图均衡化(CLAHE)(我的疑问与示例)

限制对比度自适应直方图均衡化的主要计算过程需要先了解一下 https://blog.youkuaiyun.com/u013066730/article/details/83000004 这个链接说的很清楚。看了几遍不是很明白具体是怎么操作的,我的理解是:将原来的图像划分为不重叠的几个区域(一般是8*8)然后在每个区域内,限制对比度(如何限制?不明白),并且把一部分特别 这是原来博文的截图,这个图我...

lustyoung的博客 9376

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 675

Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)

Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) #################################################################################################### # 图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equ

《好好先生》专栏 1638

SPI 协议帧格式深度解析:从 8 位数据到 16 位扩展的 3 种模式

本文深入解析SPI协议的帧格式,涵盖从8位标准到16位扩展的三种模式。通过详细讲解SPI时钟模式、数据宽度配置及实际应用案例,帮助开发者掌握SPI外设的深度定制能力,提升嵌入式系统开发效率。特别适用于连接传感器、存储器和显示器等高速通讯场景。

weixin_34110749的博客 345

ANSYS APDL生死单元实战:焊接模拟从入门到精通(附完整命令流)

本文详细介绍了使用ANSYS APDL进行焊接模拟的核心技术——生死单元法。通过一个完整的平板对接焊案例,从原理剖析、模型搭建、命令流编写到移动热源施加和后处理,手把手指导工程师掌握这一动态仿真方法,有效预测焊接过程中的温度场、残余应力与变形。

k6l7m8n9的博客 151

【OpenCV-Python】20.OpenCV的直方图均衡化

20.OpenCV的直方图均衡化 文章目录前言一、普通直方图均衡化二、限制对比度自适应直方图均衡化三、OpenCV-Python资源下载总结 前言   直方图均衡化通过调整图像的灰度来提高图像的对比度。 一、普通直方图均衡化   普通直方图均衡化主要是指将原图像的灰度级均匀地映射到全部灰度级范围内。OenCV的 cv2.equalizeHist()函数用于实现普通直方图均衡化,其基本格式如下: dst = cv2.equalizeHist(src) dst为直方图均衡化后的图像 src为原图像,

每天都在学习的小博主 3496

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

w0shishabi的博客 1777

python opencv彩色图像自适应直方图均衡化

import numpy as np import cv2 as cv # 彩色图像进行自适应直方图均衡化 def hisEqulColor(img): ycrcb = cv.cvtColor(img, cv.COLOR_BGR2YCR_CB) channels = cv.split(ycrcb) clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) clahe.apply(channels[0], chan.

qq_44728587的博客 9371

AIGC 算法工程师面试八股文全解析:Diffusion Models 原理、推导与实战要点

特性 | 重参数化技巧 (Reparameterization Trick) |本质| 将随机变量的采样过程从不可导的随机操作转换为可导的确定性函数与一个已知分布的随机噪声的组合。目的。

m0_71589036的博客 403

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

图像处理之直方图均衡化与CLAHE技术详解及Python代码实现

图像处理之直方图均衡化与CLAHE技术详解及Python代码实现(包含详细的完整的程序和数据)_直方图均衡化CLAHE资源-优快云文库 https://download.youkuaiyun.com/download/xiaoxingkongyuxi/89872640。通过对不同方法的比较,我们能够清晰地看到它们在图像处理中的应用效果,为进一步的图像分析和处理下基础。中实现图像的直方图均衡化,同时比较传统的直方图均衡化和对比度受限的自适应直方图均衡化(直方图均衡化是一种常见的图像处理技术,用于改善图像的对比度。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1253

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: OpenCV-Python调整图像对比度和带文字白纸照片背景漂白方法
下一篇: OpenCV-Python对比度受限的自适应直方图均衡CLAHE知识介绍
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值