void GrayScaleProcess(unsigned char* pBuf, int width, int height)
{
for (int i=0; i<height; i++)
{
for (int j=0; j<width;j=j+1)
{
unsigned char* p = pBuf;
p = p + i*width*3+j*3;
unsigned char b = *(p);
unsigned char g = *(p+1);
unsigned char r = *(p+2);
unsigned char gray = 0.3*r+0.59*g+0.11*b;
*(p) = gray;
*(p+1) = gray;
*(p+2) = gray;
}
}
}
void EqualizeHistProcess()
{
agg::rendering_buffer &rbuf = rbuf_window();
agg::pixfmt_bgr24 pixf(rbuf);
typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;
renderer_base_type renb(pixf);
agg::rasterizer_scanline_aa<> ras;
agg::scanline_u8 sl;
ren_bas.clear(agg::rgba8(255,255,255));
agg::pixel_map pm_img;
if(!pm_img.load_from_bmp("E:/docs/agg2/beauty.bmp")) return;
agg::rendering_buffer rbuf_img(pm_img.buf(), pm_img.width(), pm_img.height(), -pm_img.stride());
agg::pixfmt_bgr24 pixf_img(rbuf_img);
rbuf.copy_from(rbuf_img);
GrayScaleProcess(rbuf.buf(), rbuf.width(), rbuf.height());
//1统计每一个灰度值的个数
int colorDistributionInfoArray[256] = {0};
unsigned char* p = rbuf.buf();
for (int i=0; i<rbuf.width()*rbuf.height()*3; i++)
{
colorDistributionInfoArray[*p]++;
p++;
}
//2计算每一个灰度值个数占总数的百分比
double colorDistributionRateArray[256] = {0};
for (int i=0; i<256; i++)
{
colorDistributionRateArray[i] = (double)colorDistributionInfoArray[i]/(rbuf.width()*rbuf.height()*3);
}
//3进行累积分布
double colorDistributionAccumulateArray[256] = {0};
colorDistributionAccumulateArray[0] = colorDistributionRateArray[0];
for (int i=1; i<256; i++)
{
colorDistributionAccumulateArray[i] += colorDistributionAccumulateArray[i-1];
colorDistributionAccumulateArray[i] += colorDistributionRateArray[i];
}
//4根据累积分布概率重新调整每一级灰度的值
int newColorDistributionArray[256] = {0};
for (int i=0; i<256; i++)
{
double result = 255 * colorDistributionAccumulateArray[i];
if (result>255)
{
result = 255;
}
newColorDistributionArray[i] = result;
}
//5修改图片每一个像素的灰度值
p= rbuf.buf();
for (int i=0; i<rbuf.width()*rbuf.height()*3; i++)
{
*p = newColorDistributionArray[*p];
p++;
}
}
本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1732378,如需转载请自行联系原作者