C++ OpenCV直方图均衡化
Posted 微卡智享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ OpenCV直方图均衡化相关的知识,希望对你有一定的参考价值。
直方图定义
图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类。
数码时代,直方图可以说是无处不在。无论是相机的显示屏,还是后期PS、ACR里的窗口,甚至色阶、曲线的工具之中,都可以看到直方图的身影。
要理解直方图,绕不开“亮度”这个概念。人们把照片的亮度分为0到255共256个数值,数值越大,代表的亮度越高。其中0代表纯黑色的最暗区域,255表示最亮的纯白色,而中间的数字就是不同亮度的灰色。人们还进一步把这些亮度分为了5个区域,分别是黑色,阴影,中间调,高光和白色。
如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像元取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。
基本思想
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。
通过上一篇我们用到了remap这个函数,可以将图像灰度分布从一个分布映射到另一个分布,然后再得到映射后的像素值即可。
直方图均衡化API cv::equalizeHist
代码演示
新建一个项目opencv-0020,配置属性(),然后在源文件写入#include和main方法
直方图均衡化
代码非常简单
我们来看看显示效果
我们再换换别的图试一下效果
-END-
以上是关于C++ OpenCV直方图均衡化的主要内容,如果未能解决你的问题,请参考以下文章