设为首页 加入收藏

TOP

OpenCV直方图均衡
2014-11-23 19:38:29 】 浏览:276
Tags:OpenCV 方图 均衡

OpenCV直方图均衡的测试,作一下备份




// histtest.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"



#include
#include
#include


int HistogramBins = 256;
float HistogramRange1[2]={0,255};
float *HistogramRange[1]={&HistogramRange1[0]};


float CumulativeNumber;
float CDFArray[256];
uchar LookupTableData[256];


void DrawHistogramImage(CvHistogram *Histogram,IplImage *HistogramImage,int HistogramBins);


int main()
{
IplImage *Image1;
IplImage *Image2;
CvHistogram *Histogram1;
CvHistogram *Histogram2;
CvMat *LookupTableMatrix;
IplImage *GrayHistogramImage;
IplImage *EqualizeHistogramImage;



Image1=cvLoadImage("2.png",0);
Image2=cvCreateImage(cvGetSize(Image1),IPL_DEPTH_8U,1);
Histogram1 = cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);
Histogram2 = cvCreateHist(1,&HistogramBins,CV_HIST_ARRAY,HistogramRange);


LookupTableMatrix = cvCreateMat(1,256,CV_8UC1);
GrayHistogramImage=cvCreateImage(cvSize(256,250),IPL_DEPTH_8U,3);
EqualizeHistogramImage=cvCreateImage(cvSize(256,250),IPL_DEPTH_8U,3);


GrayHistogramImage->origin=1;
EqualizeHistogramImage->origin=1;


cvCalcHist(&Image1,Histogram1);
DrawHistogramImage(Histogram1,GrayHistogramImage,HistogramBins);


//Probability Density Function (PDF)
cvNormalizeHist(Histogram1,1);
//End


//Cumulative Distribution Function (CDF)
CumulativeNumber=0;
for(int i=0;i {
CumulativeNumber=CumulativeNumber+cvQueryHistValue_1D(Histogram1,i);
CDFArray[i]=CumulativeNumber;
}
//End


//Make Look-up Table
printf("Look-up Table Number:\n");
for(int i=0;i {
LookupTableData[i]=(uchar)(255*CDFArray[i]);
printf("%f\n",(255*CDFArray[i]));
}
//End


cvSetData(LookupTableMatrix,LookupTableData,CV_AUTOSTEP);
cvLUT(Image1,Image2,LookupTableMatrix);


cvCalcHist(&Image2,Histogram2);
DrawHistogramImage(Histogram2,EqualizeHistogramImage,HistogramBins);


cvNamedWindow("Orig",1);
cvNamedWindow("Equalized",1);
cvNamedWindow("Gray Histogram",1);
cvNamedWindow("Equalize Histogram",1);
cvShowImage("Orig",Image1);
cvShowImage("Equalized",Image2);
cvShowImage("Gray Histogram",GrayHistogramImage);
cvShowImage("Equalize Histogram",EqualizeHistogramImage);


cvWaitKey(0);


}


void DrawHistogramImage(CvHistogram *Histogram,IplImage *HistogramImage,int HistogramBins)
{
CvPoint Point1;
CvPoint Point2;


for(int i=0;i {
Point1=cvPoint(i,(int)(cvQueryHistValue_1D(Histogram,i)/20));
Point2=cvPoint(i,0);
cvLine(HistogramImage,Point1,Point2,CV_RGB(127,127,127));


}
}


--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HTML5入门基础教程 下一篇Python 多线程之threading condit..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目