opencv中 equalizeHist()均衡化直方图
1、EqualizeHist函数
函数作用:
直方图均衡化,,用于提高图像的质量
2、EqualizeHist函数调用形式
C++: void equalizeHist(InputArray src,
OutputArray dst)
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("C://1.bmp", 1);
cvtColor(src, src, CV_BGR2GRAY);
Mat dst;
equalizeHist(src, dst);
imshow("TEST", dst);
waitKey(0);
return 0;
}
直方图均衡化
原理
例程
-
咋个例程是用来干嘛的?
- 加载源图像
- 把源图像转为灰度图
- 使用OpenCV函数 EqualizeHist 对直方图均衡化
- 在窗体中显示源图像和均衡化后图像.
-
下载例程: 点击 这里
-
例程一瞥:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
Mat src, dst;
char* source_window = "Source image";
char* equalized_window = "Equalized Image";
/// 加载源图像
src = imread( "C://1.bmp", 1 );
if( !src.data )
{ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;
return -1;}
/// 转为灰度图
cvtColor( src, src, CV_BGR2GRAY );
/// 应用直方图均衡化
equalizeHist( src, dst );
/// 显示结果
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
imshow( equalized_window, dst );
/// 等待用户按键退出程序
waitKey(0);
return 0;
}
结果
-
为了更好地观察直方图均衡化的效果, 我们使用一张对比度不强的图片作为源图像输入, 如下图:
它的直方图为:
注意到像素大多集中在直方图中间的强度上.
-
使用例程进行均衡化后, 我们得到下面的结果:
这幅图片显然对比度更强. 再验证一下均衡化后图片的直方图:
注意到现在像素在整个强度范围内均衡分布.
虹膜图像测试:
原图像:
equalizeHist均衡化直方图后:图像有些地方增强了。