对于一些过度曝光的图像,实质上是图像的亮度值分布集中在某一个区域,导致图像的对比度过低。为了解决这个问题,引出了直方图均衡化这个技术,将亮度值分布很集中的直方图的亮度范围拉大至整一个亮度区域(如8位灰度图就是到0-255)。
OpenCV提供了equalizeHist这个函数来进行灰度图像的直方图均衡化,使用方法很简单,这里就不专门介绍这个函数了,直接上源代码吧,至于实现的原理,大家可以参考相关文献。
代码中用到的图像下载链接:http://pan.baidu.com/s/1nuZsmbZ 密码:npom
图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!
//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage = imread("20.jpg");
imshow("【原图】", srcImage);
Mat grayImage;
cvtColor(srcImage, grayImage, CV_BGR2GRAY);
imshow("【灰度图】", grayImage);
Mat dstImage;
//直方图均衡化
equalizeHist(grayImage, dstImage);
imshow("【均衡化后的灰度图】", dstImage);
waitKey(0);
return 0;
}
代码非常简单,这里就不多做赘述了!
运行结果截图如下: