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更新版本试试

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题