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

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



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

一、引言

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

二、CLAHE类及方法介绍

2.1、简介

该类有2个重要属性:

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

2.2、成员方法简介

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

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

2.2.2、collectGarbage方法

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

2.2.3、getClipLimit方法
2.2.4、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.csdn.net/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.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理》、《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》及《图像处理基础知识》的介绍。

如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。
OpenCV-Python自适应直方图均衡类CLAHE及方法详解

写博不易,敬请支持:

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

关于老猿的付费专栏

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

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

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

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

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222801.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午3:00
下一篇 2026年3月17日 下午3:00


相关推荐

  • 如何将ER图转化为关系模型(超详细、含例题)「建议收藏」

    如何将ER图转化为关系模型(超详细、含例题)「建议收藏」本文转载自:http://blog.csdn.net/HaoDaWang/article/details/78098937?locationNum=4&fps=1超级感谢博主分享本篇博文中的例题只涉及到N:M和N:M:P的转换,大家看完后可以再去看下百度文库里面的这个例题,这个例题几个转换准则都用到了。https://wenku.baidu.com/view/33849a73a…

    2026年2月13日
    25
  • Grok vs OpenAI:2025颠覆性AI模型拆解与国内API接入指南

    Grok vs OpenAI:2025颠覆性AI模型拆解与国内API接入指南

    2026年3月15日
    3
  • FFTW 库使用

    FFTW 库使用官方网址官方文档链接中文资料 百度文库概念离散余弦变换 DCTforDiscre 离散正弦变换 DSTforDiscre 支持数据多维维数多维复数 fft 计划 事务 执行计划 voidfftw execute constfftw planplan 删除计划 voidfftw dest

    2026年3月5日
    2
  • JS链接转换为二维码

    JS链接转换为二维码这里用到一个JQ插件qrcode.js下载地址https://github.com/jeromeetienne/jquery-qrcode先引入<scriptsrc=”js/jquery.qrcode.min.js”></script>       <divclass=”content1″>…

    2025年9月18日
    8
  • 中小型企业局域网的组网方案

    中小型企业局域网的组网方案中小型企业局域网的组网方案1.中小型企业局域网的组网方案2.背景和发展情况分析计算机网络技术的迅猛发展,我们当今社会已经步入到了一个信息化时代。人们可以通过网络就可以获取更多的信息资料,人们的生活和工作方式也已经发生了翻天覆地的巨大变化。随着组网技术的发展,中小型企业中的网络连接就出现了局域网的概念,它是指将一定范围内的计算机应用一定的计算机技术连接在一起,从而实现多台电脑同时共享公用网络资源。这种局域网手段将更大的方便局域网内的用户,还可以节省大笔的成本费用和网络开支。对于中小型企业来说,其网络建设

    2022年7月12日
    23
  • linux监控系统catic,网络设备监控-Catic添加H3C的监控图解[通俗易懂]

    linux监控系统catic,网络设备监控-Catic添加H3C的监控图解[通俗易懂]网络设备监控-Catic添加H3C的监控图解作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。首先,我要声明满足2个条件才能作本篇笔记的操作:第一:你得有台cacti服务器,第二:你得有台交换机,这台交换机需要配置团体名并且可以和你的cacti服务器互通。以上两点我已经在之前的笔记分享过,这里我就不啰嗦啦,直接上图。对了,如果你懒得部署Cacti的话,也可以直接用网上的别人做好的iso…

    2025年7月27日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号