高斯滤波函数

 

/************************************************************************/
/* double sigma = 1.0;
          nR = 3
*/
/************************************************************************/
void Gauss_Smooth(uchar *pSrc, int nWidth, int nHeight,uchar* pDst)
{
 // 循环控制变量
 int x,y;

 // 一维高斯数据滤波器
 int pK[2] = {70,116};

 int *pTemp = (int *)malloc(nWidth*nHeight*sizeof(int));

 int Sum = 0;

 int nW1 = nWidth-1;

 // x方向进行滤波
 for(y=0; y<nHeight; y++)
 {
  // 第一行
  pTemp[y*nWidth] = ((int)pSrc[y*nWidth]) * pK[1]+((int)pSrc[y*nWidth+1] + 1 ) * pK[0];

  for(x=1; x<nWidth-1; y++)
  {
   pTemp[y*nWidth + x] = (((int)pSrc[y*nWidth + x-1] + (int)pSrc[y*nWidth + x+1]) * pK[0]
         + (int)pSrc[y*nWidth + x]* pK[1])>>16;
  }
 
  // 最后一行
  pTemp[y*nWidth+nW1] = ((int)pSrc[y*nWidth+nW1]) * pK[1] + ((int)pSrc[y*nWidth+nW1-1] + 1) * pK[0];
 }

 // y方向进行滤波
 int nhW = (nHeight-1)*nWidth;
 for(x=0; x<nWidth; x++)
 { 
  // 第一列
  pDst[x] = ( pTemp[x]* (pK[1]+pK[0]) +pTemp[x+nWidth]* pK[0])>>16;

  for(y=1; y<nHeight-1; y++)
  {
   pDst[y*nWidth + x] = ((pTemp[(y-1)*nWidth + x] + pTemp[(y+1)*nWidth + x]) * pK[0]
         +pTemp[y*nWidth + x]* pK[1])>>16;
  }

  // 最后一列
  pDst[nhW+x] = (pTemp[nhW+x] * (pK[0]+pK[1])+pTemp[nhW+x-nWidth] * pK[1])>>16;
 }
 free(pTemp);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值