sinat_31207641 2015-12-26 10:16 采纳率: 37.5%
浏览 1493
已结题

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

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条回答 默认 最新

  • 纹枰老妖 2015-12-27 14:06
    关注

    用vs2013更新版本试试

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!