?? vf_smooth.h
字號:
#ifndef __VFSMOOTH_H__
#define __VFSMOOTH_H__
#include "VF_Type.h"
#include "VF_Global.h"
//
// smooth: 對圖像進行均值平滑濾波,消除噪聲
//
void smooth(uint8 *lpInBuffer, uint8 *lpOutBuffer, sint32 r, sint32 d)
{
////////////////////////////////////////////////////////////////////////
// lpInBuffer: [in] 要平滑的圖像數據緩沖區
// lpOutBuffer: [out] 平滑后的圖像數據緩沖區
// r: [in] 平滑濾波器半徑
// d: [in] 平滑濾波器步長
////////////////////////////////////////////////////////////////////////
sint32 x, y, i, j;
uint8 *lpSrc;
uint8 *lpRst;
sint32 sum, num;
if(d == 2)
{
for(y = 0; y < IMGH; y++)
{
for(x = 0; x < IMGW; x++)
{
lpSrc = lpInBuffer + y*IMGW + x;//原圖像指針
lpRst = lpOutBuffer + y*IMGW + x;//目標圖像指針
sum = 0; //像素和總量
num = 0; //像素量
for(i = -r; i <= r; i+=2) //在中心為(x,y)邊長為2r的矩形中搜索
{
if(i+y<0 || i+y>=IMGH)
continue;
for(j = -r; j <= r; j+=2)
{
if(j+x<0 || j+x>=IMGW)
continue;
sum += *(lpSrc + i*IMGW + j);//求像素和
num++; //求像素個數
}
}
*lpRst = (uint8)(sum/num); //求平均
}
}
}
else
{
for(y = 0; y < IMGH; y++)
{
for(x = 0; x < IMGW; x++)
{
lpSrc = lpInBuffer + y*IMGW + x;
lpRst = lpOutBuffer + y*IMGW + x;
sum = 0;
num = 0;
for(i = -r; i <= r; i++)
{
if(i+y<0 || i+y>=IMGH)
continue;
for(j = -r; j <= r; j++)
{
if(j+x<0 || j+x>=IMGW)
continue;
sum += *(lpSrc + i*IMGW + j);
num++;
}
}
*lpRst = (uint8)(sum/num);
}
}
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -