#include "cv.h"
#include "highgui.h"
using namespace cv;
#define PI 3.1415926
int main()
{
//读取图像
Mat image;
image=imread("circle.jpg",CV_LOAD_IMAGE_GRAYSCALE);
int M=image.rows;
int N=image.cols;
//计算每个灰度值出现的次数
int count[256]={0};
double p[256],c[256];
for(int i=0;i<M;i++)
{
uchar* p1=image.ptr<uchar>(i);
for(int j=0;j<N;j++)
count[p1[j]]++;
}
//归一化
for(int i=0;i<256;i++)
p[i]=(double)count[i]/(M*N);
//累计
c[0]=p[0];
for(int i=1;i<256;i++)
c[i]=c[i-1]+p[i];
//找出最大灰度值和最小灰度值
int minValue,maxValue;
for(int i=0;i<256;i++)
if(count[i]!=0)
{
minValue=i;
break;
}
for(int i=255;i>=0;i--)
if(count[i]!=0)
{
maxValue=i;
break;
}
//均衡化
for(int i=0;i<M;i++)
{
uchar* p1=image.ptr<uchar>(i);
for(int j=0;j<N;j++)
{
p1[j]=(uchar)(c[p1[j]]*(maxValue-minValue)+minValue);
}
}
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
imshow("test",image);
waitKey(0);
return 0;
}