在MFC中 用来实现高斯滤波
void CCHJDoc::OnSmooth()
{
// TODO: Add your command handler code here
int i, j, m, n; //循环变量
int N = 16; //衰减因子
double temp; //中间变量
int templet[3][3] = {1,2,1,2,4,2,1,2,1}; //高斯平滑模板
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
LPSTR pic = FindDIBBits(lpDIB);
::GlobalUnlock((HGLOBAL) m_hDIB);
for(i=0; i<256; i++) //将原像素点保存在pixel中
{
for(j=0; j<256; j++)
{
pixel[i][j] = pic[i*256+j];
}
}
for(i=1; i<255; i++)
{
for(j=1; j<255; j++)
{
temp = 0;
for(m=0; m<3; m++)
{
for(n=0; n<3; n++)
{
temp += pixel[i+m-1][j+n-1]*templet[m][n];
}
}
temp /= N;
pic[256*i+j] = temp;
}
}
UpdateAllViews(NULL);
}
为什么变换后是这样的:如图