直方图均衡化
2015-08-14 14:24
363 查看
我们可以认为一副高质量的图像应该平均使用所有像素强度,直方图均衡化,即使得直方图尽可能的平坦;equalizeHist可以用来得到均衡化后的直方图,该函数返回类型是void;
#include <opencv2\core\core.hpp> #include <opencv2\imgproc\imgproc.hpp> #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; //计算单通道灰度图直方图 Mat Hist(Mat& image){ Mat hist; float rang[2]={0.0,255.0}; int channels[1]={0}; int dims=1; int histSize[1]={256}; const float* ranges[1]={rang}; calcHist(&image,1,channels,Mat(),hist,dims,histSize,ranges); return hist; } //画出直方图 Mat GetHistimage(Mat& image){ Mat hist=Hist(image); Mat histimage(256,256,CV_8U,Scalar(255)); double maxVal=0; double minVal=0; cv::minMaxLoc(hist, &minVal, &maxVal, 0, 0); int hpt = static_cast<int>(0.9*256); for(int i=0;i<256;i++){ float binVal = hist.at<float>(i); int intensity = static_cast<int>(binVal*hpt/maxVal); rectangle(histimage,Point(i,256),Point(i,256-intensity),Scalar::all(0)); } return histimage; } Mat Equalize(Mat& image){ Mat result; equalizeHist(image,result); return result; } int main(){ Mat image=imread("F:\\opencv_test\\6.tif",0); Mat originalHist=GetHistimage(image); Mat eImage=Equalize(image); Mat eImageHist=GetHistimage(eImage); namedWindow("eImage",0); imshow("eImage",eImage); namedWindow("eImageHist",0); imshow("eImageHist",eImageHist); namedWindow("original",0); imshow("original",image); namedWindow("originalHist",0); imshow("originalHist",originalHist); waitKey(0); return 0; }
相关文章推荐
- YUV(一)-数据格式分析
- Centos下更新Python版本
- HDOJ HDU Today 2112【最短路Dijkstra+字符串处理】
- 验证码识别技术(一)图片下载
- Jenkins插件及 测试源码
- 如何利用开盘半小时预测当天走势
- 根据sessionId获取session对象
- ios中将view转为image
- Java编程一些经验
- uva 11572 Unique Snowflakes
- 【Android学习笔记】【Android学习资源】GitHub上史上最全的Android开源项目分类汇总
- hibernate 级联查询
- 集合运算的基本法则
- POJ 3468 A Simple Problem with Integers
- 如何退出Activity?如何安全退出已调用多个Activity的Application?
- 根据sessionId获取相应的session
- Validform_checktip
- 【IOS】ios8推送消息注册
- Animation动画之AlphaAnimation(透明度变化)
- 黑马程序员--Java集合框架(3)