图像处理之图像直方图

来源:互联网 发布:dna计算机 知乎 编辑:程序博客网 时间:2024/04/28 10:40

在C++版opencv中简化了对Hist数据结构的复杂性。

微笑直方图计算原理


微笑重要函数

计算直方图函数原型:

//! computes the joint dense histogram for a set of images.CV_EXPORTS void calcHist( const Mat* images, int nimages,                          const int* channels, InputArray mask,                          OutputArray hist, int dims, const int* histSize,                          const float** ranges, bool uniform=true, bool accumulate=false );



微笑结合原理说明:images为输入图像序列;nimages输入图像数;channels一维数组,指明图像的哪些通道被计算(从0开始,为0,1,2,3,4,....的子集);

mask掩码,为空时使用Mat();hist统计数据,维数取决后面的dims;histSize指明bins的个数;ranges指明每一bins范围。

具体参考:http://www.tuicool.com/articles/b2iYzm

归一化:


#include "cv.h"#include "highgui.h"using namespace std;using namespace cv;int main(int argc,char *argv[]){Mat src,srcGray,hist;src=imread("src.jpg");cvtColor(src,srcGray,CV_BGR2GRAY);int histSize=256,channels=0;float range[]={0,255};const float *histRange={range};calcHist(&srcGray,1,&channels,Mat(),hist,1,&histSize,&histRange,true,false);int histHigh=200;Mat histImage(histHigh,histSize*5,CV_8UC1,Scalar(0,0,0));normalize(hist,hist,0,histHigh,NORM_MINMAX,-1,Mat());for (int i=0;i<histSize;i++)line(histImage,Point(i*5+1,histHigh-1),Point(i*5+1,cvRound(histHigh-1-hist.at<float>(i))),Scalar::all(255),2);imshow("histImage",histImage);waitKey(0);destroyAllWindows();return 0;}

效果:

 


均衡化后的结果:



0 0
原创粉丝点击