OpenCV-Python教程:直方图均衡(equalizeHist,createCLAHE)

38 篇文章 5 订阅
36 篇文章 6 订阅

目录

1、直方图均衡equalizeHist

2、自适应直方图均衡createCLAHE

扩展阅读:



返回Opencv-Python教程

直方图均衡就是让图像的像素个数多的灰度级拉的更宽,对像素个数少的灰度级进行压缩,从而达到提高图像的对比度的目的。从直方图的直观效果来看,就是让y轴比较高的位置变矮向x轴方向膨胀,y轴比较矮的位置变高并在x轴方向压缩。

1、直方图均衡equalizeHist

equalizeHist()可以实现图像的直方图均衡,它是一种全局直方图均衡,考量的对象是整幅图像。

接口形式:

cv2.equalizeHist(src[, dst]) ->dst
  • 参数含义:
  • src:输入图像,8bit单通道;
  • dst:均衡后的输出图像,类型同src;

下面这个例子读入图像后做直方图均衡,然后对比其直方图:

import numpy as np
import matplotlib.pyplot as plt
import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
plt.rc('font',family='Youyuan',size='9')
plt.rc('axes',unicode_minus='False')

img_src = cv2.imread('..\\samples\\data\\fruits.jpg',0) 
img_dst = cv2.equalizeHist(img_src) 

histSize = 512
histRange = (0, 256)  
hist_src = cv2.calcHist([img_src], [0], None, [histSize], histRange) 
hist_dst = cv2.calcHist([img_dst], [0], None, [histSize], histRange)  

#显示图像
fig,ax = plt.subplots(2,2)
ax[0,0].set_title('hist_src')
ax[0,0].plot(hist_src) 
ax[0,1].set_title('hist_dst')
ax[0,1].plot(hist_dst)
ax[1,0].set_title('src')
ax[1,0].imshow(cv2.cvtColor( img_src, cv2.COLOR_BGR2RGB),'gray')
ax[1,1].set_title('dst') 
ax[1,1].imshow(cv2.cvtColor(img_dst,cv2.COLOR_BGR2RGB),'gray')  
#ax[0,0].axis('off');ax[0,1].axis('off');
ax[1,0].axis('off');ax[1,1].axis('off')#关闭坐标轴显示
plt.show()  

运行结果:

从运行结果看,原来整体较暗的图像,经过直方图均衡后,整体要亮一些。这点也和直方图显示的效果是一样的,原图的直方图整体要偏左,而经过直方图均衡后的直方图在x轴上分布更均匀。

2、自适应直方图均衡createCLAHE

equalizeHist()方法是一种全局直方图均衡方法,在某些场合可能会导致原本对比度高的区域反而变得更低,像下面这个例子中原图上半部分的树叶对比度高,但是下半部分对比度低,如果使用equalizeHist()方法得到的图片如下图右下部分所示:

直方图均衡处理后虽然树叶下半部分的细节都呈现出来了 ,但是上半部分却因为过亮导致丢失了很多细节。

CLAHE是对比度抑制自适应直方图均衡(Contrast Limited Adaptive Histogram Equalization)的简称,不同于普通的直方图均衡,它是一种局部直方图均衡方法。

调用接口分2步,先创建实例,再调用apply()方法:

cv2.createCLAHE([, clipLimit[, tileGridSize]]) ->retval
dst=retval.apply(src)
  • 参数含义:
  • clipLimit:对比对限制阈值,默认为40;
  • tileGridSize:直方图均衡的栅格尺寸,输入图像将会按照该尺寸分隔后进行局部直方图均衡,默认是8×8大小;
  • src:输入图像,8bit单通道;
  • dst:均衡后的输出图像,类型同src;

下面这个例子将普通直方图均衡和自适应直方图均衡做对比:

import numpy as np
import matplotlib.pyplot as plt
import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
plt.rc('font',family='Youyuan',size='9')
plt.rc('axes',unicode_minus='False')

img_src = cv2.imread('..\\samples\\picture\\leaf2.jpeg',0) 
#普通直方图均衡
img_dst = cv2.equalizeHist(img_src)
#自适应直方图均衡 
clahe = cv2.createCLAHE(clipLimit=5.0, tileGridSize=(8,8))
img_dst_clahe = clahe.apply(img_src)

histSize = 256
histRange = (0, 256) 
hist_src = cv2.calcHist([img_src], [0], None, [histSize], histRange) 
hist_dst = cv2.calcHist([img_dst], [0], None, [histSize], histRange)  
hist_dst_clahe = cv2.calcHist([img_dst_clahe], [0], None, [histSize], histRange)  

#显示图像
fig,ax = plt.subplots(2,3)
ax[0,0].set_title('hist_src')
ax[0,0].plot(hist_src) 
ax[0,1].set_title('hist_dst')
ax[0,1].plot(hist_dst)
ax[0,2].set_title('hist_dst_clahe')
ax[0,2].plot(hist_dst_clahe)
ax[1,0].set_title('img_src')
ax[1,0].imshow(cv2.cvtColor( img_src, cv2.COLOR_BGR2RGB),'gray')
ax[1,1].set_title('img_dst') 
ax[1,1].imshow(cv2.cvtColor(img_dst,cv2.COLOR_BGR2RGB),'gray')  
ax[1,2].set_title('img_dst_clahe') 
ax[1,2].imshow(cv2.cvtColor(img_dst_clahe,cv2.COLOR_BGR2RGB),'gray')  
#ax[0,0].axis('off');ax[0,1].axis('off');
ax[1,0].axis('off');ax[1,1].axis('off');ax[1,2].axis('off')#关闭坐标轴显示
plt.show()  

运行结果:

从运行结果可以看到,使用自适应直方图均衡后,不但树叶下半部分的细节呈现出来了 ,而且上半部分的细节也得到了保留。

扩展阅读:

新鲜上架的Python3.10,来个match-case尝尝鲜

你别耍我,0.1+0.2居然不等于0.3?

如何实现一个“万能”的调试打印函数

论如何把自己变成卡通人物

有了这款神器,什么吃灰文件都统统现形

一行代码深度定制你的专属二维码(amzqr)

桔子菌和超市老板田大爷的一次角色互换经历

来看看怎么用OpenCV解构Twitter大牛的视觉错觉图

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinHex 是一个专门用来对付各种日常紧急情况的小工具。它可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。同时它还可以让你看到其他程序隐藏起来的文件和数据。总体来说是一款非常不错的 16 进制编辑器。得到 ZDNetSoftwareLibrary 五星级最高评价,拥有强大的系统效用。 功能概述 具体来说,WinHex 是一款以通用的 16 进制编辑器为核心,专门用来对付计算机取证、数据恢复、低级数据处理、以及 IT 安全性、各种日常紧急情况的高级工具: 用来检查和修复各种文件、恢复删除文件、硬盘损坏、数码相机卡损坏造成的数据丢失等。 功能包括 (依照授权类型): - 硬盘,软盘,CD-ROM和 DVD,ZIP,Smart Media,Compact Flash,等磁盘编辑器... - 支持 FAT,NTFS,Ext2/3/4,ReiserFS,Reiser4,UFS,CDFS,UDF 文件系统 - 支持对磁盘阵列 RAID 系统和动态磁盘的重组、分析和数据恢复 - 多种数据恢复技术 - RAM编辑器,可以编辑物理内存和其他进程的虚拟内存 - 可分析 RAW 格式原始数据镜像文件中的完整目录结构,支持分段保存的镜像文件 - 数据解释器,已知 20 种数据类型 - 使用模板编辑数据结构(例如: 修复分区表/引导扇区) - 连接和分割、以奇数偶数字节或字的方式合并、分解文件 - 分析和比较文件 - 搜索和替换功能尤其灵活 - 磁盘克隆 (可在 DOS 环境下使用 X-Ways Replica) - 驱动器镜像和备份 (可选压缩或分割成 650 MB 的档案) - 程序接口 (API) 和脚本 - 256 位 AES 加密,校验和,CRC32,哈希算法 (MD5,SHA-1,...) - 数据擦除功能,可彻底清除存储介质中残留数据 - 可导入剪贴板所有格式数据,包括 ASCII、16 进制数据 - 可进行 2 进制、16 进制 ASCII,Intel 16 进制,和 Motorola S 转换 - 字符集: ANSI ASCII,IBM ASCII,EBCDIC,(Unicode) - 立即窗口切换、打印、生成随机数字 - 支持打开大于 4 GB 的文件,非常快速,容易使用。 - 广泛的联机帮助 功能特点 WinHex 具有强大的搜索功能,可以查找和替换文本或Hex值。选择搜索菜单中的联合搜索项,弹出搜索对话框,先输入该文件要搜索的十六进制值选择通配符和搜索的范围就可以开始搜索了。你可以选择在整个文件中搜索,也可选择仅在区块中进行有条件的搜索。而且在 WinHex 中可以方便的进行定位操作,快速转道新的位置。执行定位菜单中的标记定位命令,或按Ctrl+L,将鼠标指向需要定位的位置,就可以在当前鼠标所在的位置作上标记,不管你操作到什么地方,按组合键Ctrl+k,就可以返回到标记所在的位置。执行定位菜单中的删除标记命令,可以将所作的标记删除。除了利用标记定位以外,你还可以方便的转到文件的开始和结尾,区块的开始和结尾,行首和行尾以及页首和页尾。你可以自己试一试,相信你很快就知道了。   在WinHex中集成了强大的工具,包括磁盘编辑器,Hex转换器和RAM编辑工具,并能够方便的调用系统常用工具如:计算器,记事本,浏览器等。使用十分方便。按 F9,弹出磁盘编辑器对话框,首先选择磁盘分区,然后按确定按钮就可以方便的对磁盘的空余空间进行清理。点击工具栏中的 RAM 编辑工具按钮,弹出 RAM 编辑器,选择需要浏览或编辑修改的 RAM 区,选择确定就可以了,RAM 的内容就显示在主窗口了。在未注册的版本中,可以编辑,但不能保存大小超过 512K 的文件且只能浏览而不能修改编辑 RAM 区域。按 F8,弹出十六进制和十进制转换器,左边栏显示十六进制数字,右边栏显示十进制数字。如果你在左边输入十六进制数,按 Enter 其十进制结果就出现在右边的矩形框中了,反之亦然。如果你按组合键 Alt+F8,可调用系统计算器。   WinHex 使用简单,功能强大,可以方便你程序的调试、文本编辑、科学计算和系统管理,相信你会喜欢的。如果你想删除 WinHex 软件,把整个目录删掉就行了   在 DOS 时代,我们编辑文件代码用的一般都是 PCTOOLS V5.0,可是自从 FAT32 出现以来,PCTOOLS V5.0 不能用了,就很少优秀的文件编辑器出现过,不过现在有了 WinHex 可以说是继前者之后的最优秀的文件编辑器了。作为一个 16 进制文件编辑与磁盘编辑软件。WinHex 以文件小、速度快,功能强大而著称,连 ZDNetSoftwareLibrary 也给了他5星的最高评价。它可以胜任Hex和ASCII码编辑修改,多文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值