Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279757
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类:

2010-07-25 14:46:26

/*************************************************************************
               直方图均衡子函数
 ************************************************************************/
BOOL WINAPI InteEqualize(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
 
 // 指向源图像的指针
 unsigned char* lpSrc;
 
 // 临时变量
 LONG lTemp;
 
 // 循环变量
 LONG i;
 LONG j;
 
 // 灰度映射表
 BYTE bMap[256];
 
 // 灰度映射表
 LONG lCount[256];
 
 // 图像每行的字节数
 LONG lLineBytes;
 
 // 计算图像每行的字节数
 lLineBytes = WIDTHBYTES(lWidth * 8);
 
 // 重置计数为0
 for (i = 0; i < 256; i ++)
 {
  // 清零
  lCount[i] = 0;
 }
 
 // 计算各个灰度值的计数
 for (i = 0; i < lHeight; i ++)
 {
  for (j = 0; j < lWidth; j ++)
  {
   lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;
   
   // 计数加1
   lCount[*(lpSrc)]++;
  }
 }
 
 // 计算灰度映射表
 for (i = 0; i < 256; i++)
 {
  // 初始为0
  lTemp = 0;
  
  for (j = 0; j <= i ; j++)
  {
   lTemp += lCount[j];
  }
  
  // 计算对应的新灰度值
  bMap[i] = (BYTE) (lTemp * 255 / lHeight / lWidth);
 }
 
 // 每行
 for(i = 0; i < lHeight; i++)
 {
  // 每列
  for(j = 0; j < lWidth; j++)
  {
   // 指向DIB第i行,第j个象素的指针
   lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
   
   // 计算新的灰度值
   *lpSrc = bMap[*lpSrc];
  }
 }
 
 // 返回
 return TRUE;
}
阅读(475) | 评论(0) | 转发(0) |
0

上一篇:对数变换

下一篇:均值滤波

给主人留下些什么吧!~~