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 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘