用VC++做N*N最大值滤波时,运行没问题,但一点滤波图像出来就一片灰的,麻烦看一下程序是否有错 1C

void CZHANGMIN1View::OnMmf()
{
//N*N最大值滤波
CZHANGMIN1Doc* pDoc = GetDocument();

int iH,iW;

LPSTR   lpDIB;
LPSTR   lpDIBBits;

lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());// 找到DIB图像象素起始位置

if (::DIBNumColors(lpDIB) != 256)
{
    MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);
    ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
    return;
}

BeginWaitCursor();
lpDIBBits = ::FindDIBBits(lpDIB);

iH = ::DIBHeight(lpDIB);
iW = ::DIBWidth(lpDIB); 

int yy,xx,n2,nn,m,madomax,mado[1000];
int n=5;
n2=(n-1)/2;//2
nn=n*n;//25
    //n*n最大值频率滤波
    for(int j=n2;j<iH-n2;j++)
    for(int i=n2;i<iW-n2;i++)
    {
        //把n*n屏蔽窗口部分复制到mado[m]
        m=0;
        for(yy=j-n2;yy<=j+n2;yy++)
        for(xx=i-n2;xx<=i+n2;xx++)
        {
            mado[m]=lpDIBBits[yy*iW+xx];
            m++;
        }
        //找出mado[m]中的最大值madomax,用作最大频率值
        madomax=mado[0];
        for(m=1;m<nn;m++)
            if(madomax<mado[m])
            madomax=mado[m];
        lpDIBBits[j*iW+i]=madomax;
    }


{
    pDoc->SetModifiedFlag(TRUE);
    pDoc->UpdateAllViews(NULL);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();    

}图片说明
图片说明

1个回答

用vs2013更新版本试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐