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));

	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值