此文章属于原创文章,转载请注明:http://blog.csdn.net/iamsheldon 谢谢!!!
首先,在进行程序设计之前我们来了解一下的直方图均衡化的原理。
其中最重要的是最后一条公式
以下是实现程序:
/*******************************************************
*函数功能:灰度图像均衡化
*参数: gray_in指向输入数据的指针
gray_out指向输出数据的指针
size 为图片的大小
*说明: gray_in与gray_out可以相等
*返回值:无
*********************************************************/
void zjGrayHistQual(BYTE *gray_in,BYTE *gray_out,Size size)
{
int i;
int j;
int height;
int width;
long hist[256];
long pixelnum=0;
long nnum=0;
double pr;
height=size.height;
width=size.width;
pixelnum=height*width;
//直方图初始化
for(i=0;i<256;i++)
hist[i]=0;
//计算图像的直方图
for(i=0;i<height;i++)
for(j=0;j<width;j++)
{
++hist[*(gray_in+i*width+j)];
}
//计算变换后的灰度值
for(i=0;i<256;i++)
{
nnum+=hist[i];
pr=(double)nnum/pixelnum;
hist[i]=(BYTE)255*pr;
}
//根据结果,替换原图像的灰度
for(i=0;i<height;i++)
for(j=0;j<width;j++)
{
*(gray_out+i*width+j)=hist[*(gray_in+i*width+j)];
}
}
![](http://hi.csdn.net/attachment/201110/8/0_131805764312s2.gif)
说明:左边是处理前,右边是处理后。
大家看效果是不是很明显呢,还可以
,这种处理一般出现在图像处理前期,为后续的
![偷笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/titter.gif)
的处理 如边缘提取之类的做准备。
文章到此结束,其实我也是一只菜鸟,刚刚入门而已,所以献丑,希望大家可以交流交流。我们共同进步,为解放世界做贡献(开玩笑啦)。