OpenCV直方图均衡


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

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

#include "stdafx.h"


#include <stdio.h>
#include <cv.h>
#include <highgui.h>

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<HistogramBins;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<HistogramBins;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<HistogramBins;i++)
 {
  Point1=cvPoint(i,(int)(cvQueryHistValue_1D(Histogram,i)/20));
  Point2=cvPoint(i,0);
  cvLine(HistogramImage,Point1,Point2,CV_RGB(127,127,127));

 }
}

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

Ubuntu Linux下安装OpenCV2.4.1所需包

Ubuntu 12.04 安装 OpenCV2.4.2

CentOS下OpenCV无法读取视频文件

Ubuntu 12.04下安装OpenCV 2.4.5总结

Ubuntu 10.04中安装OpenCv2.1九步曲

基于QT和OpenCV的人脸识别系统

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

OpenCV的详细介绍:请点这里
OpenCV的下载地址:请点这里

本文永久更新链接地址:

相关内容