灰度图像的直方图均衡化

求助 灰度图像的直方图均衡化
OnHistEq()
{
// TODO: 在此添加命令处理程序代码
if(!image)
return;
//初始化各变量
int nWidth = image->GetWidth();
int nHeight = image->GetHeight();

int h[256];
float p[256],s[256];

for(int i=0 ;i<256;i++)
h[i]=0;
//遍历图像每个像素点
for(int y=0;y<nHeight;y++)
{
for(int x=0;x<nWidth;x++)
{
COLORREF rgb = image->GetPixel(x,y);
BYTE gray = RGB2GRAY(GetRValue(rgb),GetGValue(rgb),GetBValue(rgb));//获取像素点的灰度值
h[gray]++;//各灰度值的数量
}
}
//灰度变换函数
for(int i=0;i<256;i++)
p[i]=h[i]/(nWidth* nHeight);


s[0]=p[0];
for(int i = 1 ; i<256 ; i++)
s[i]=s[i-1]+p[i];//累积直方图

  //灰度对应,四舍五入
for(int i = 0 ; i<256 ; i++)
s[i]=(int)(s[i]*255+0.5);

//遍历像素点,设置新的灰度值
for(int y=0;y<nHeight;y++)
{
for(int x=0;x<nWidth;x++)
{
COLORREF rgb = image->GetPixel(x,y);
BYTE gray=RGB2GRAY(GetRValue(rgb),GetGValue(rgb),GetBValue(rgb));
rgb =RGB(s[gray],s[gray],s[gray]);
image->SetPixel(x,y,rgb);
}
}


UpdateAllViews(NULL,NULL);

}

结果图像全黑了 , 找不出 错误 请帮忙解决 谢谢~~

------解决方案--------------------
原因是:
p[i]=h[i]/(nWidth* nHeight);
导致p[i]都为0,
然后,
s[0]=p[0]; 
for(int i = 1 ; i <256 ; i++) 
s[i]=s[i-1]+p[i];//累积直方图 
又导致s[i]都为0,
然后,
rgb =RGB(s[gray],s[gray],s[gray]); 
导致rgb都为0,
所以图像显示黑色。