//举个代码例子
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
/** @function main */
int main( int argc, char** argv )
{
Mat src, dst;
char* source_window = "Source image";
char* equalized_window = "Equalized Image";
// 加载源图像
src = imread( argv[1], 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;
}
说明
-
声明原图和目标图以及窗体名称:
Mat src, dst;
char* source_window = "Source image";
char* equalized_window = "Equalized Image";
-
加载源图像:
src = imread( argv[1], 1 );
if( !src.data )
{ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;
return -1;}
-
转为灰度图:
cvtColor( src, src, CV_BGR2GRAY );
-
利用函数 equalizeHist 对上面灰度图做直方图均衡化:
equalizeHist( src, dst );
可以看到, 这个操作的参数只有源图像和目标 (均衡化后) 图像.
-
显示这两个图像 (源图像和均衡化后图像) :
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
imshow( equalized_window, 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("1.jpg", 1);
- cvtColor(src, src, CV_BGR2GRAY);
- Mat dst;
- equalizeHist(src, dst);
- imshow("shiyan", dst);
- waitKey(0);
-
-
-
-
- return 0;
- }