OpenCV学习笔记(十六):直方图均匀化:equalizeHist()
参考博客:
直方图均衡化的数学原理
直方图匹配的数学原理
直方图均衡化广泛应用于图像增强中:
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
特点:
1)对于泛白混合的的图像,均衡化可以合并一些像素灰度,可以增强图像的动态范围,从而增强图像对比度。
2)在图像对比度本就较高的情况下,如果继续均衡化,则会对灰度调和,对比度反而降低
3)均衡化的图片如果在对其均衡化,则图像不会有任何改变
1、equalizeHist()函数
void equalizeHist(
InputArray src, // 源图
OutputArray dst // 目标图像)
该函数使用以下算法对输入图像的直方图进行均衡化:
(1) 计算原图像的直方图H;
(2) 将柱状图归一化,使柱状图bin的总和为255;
(3) 计算直方图的积分;
(4) 使用H‘作为查找表转换图像:dst(x,y) = H’(src(x,y);
该算法对图像的亮度进行了归一化处理,提高了图像的对比度;
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{// 【1】加载源图像Mat srcImage, dstImage;srcImage = imread( "F:/C++/2. OPENCV 3.1.0/TEST/1.jpg", 1 );if(!srcImage.data ) { printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~! \n"); return false; }// 【2】转为灰度图并显示出来Mat grayImg;cvtColor( srcImage, grayImg, CV_BGR2GRAY );imshow( "原始图", grayImg );// 【3】进行直方图均衡化equalizeHist( grayImg, dstImage );// 【4】显示结果imshow( "经过直方图均衡化后的图", dstImage );waitKey(0);return 0;
}