逆滤波的方法进行图像复原后出现白色斑点应该怎么去除?

zhengdian10 2014-04-19 10:00:54
我用了中值滤波,代码是visual c++ 2008 的。但是出现了‘’Run-Time Check Failure #3 - The variable 'lHeight' is being used without being initialized.‘’不知道怎么办了!中值滤波的程序能运行啊,就是出结果的时候按下菜单中的中值滤波就出现这样的,该怎么修改啊?各位大神还知道其他方法吗?
...全文
269 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengdian10 2014-04-26
  • 打赏
  • 举报
回复
试过了,但是 有错误出现,大家帮忙改改啊!
Yofoo 2014-04-25
  • 打赏
  • 举报
回复
你的代码把上面一些屏蔽了, 所以不对, 这个逻辑很基础.... //LPBYTE lpDIBBits=m_pDib->GetData();//找到原图像的起始位置 // LONG lWidth=m_pDib->GetWidth(); //获得灰度图像的宽度 //LONG lHeight=m_pDib->GetHeight(); //获得灰度图像的高度 //获得原图像的高度
zhengdian10 2014-04-20
  • 打赏
  • 举报
回复


这是弹出来的提示
zhengdian10 2014-04-20
  • 打赏
  • 举报
回复
#include "stdafx.h" #include "cdib.h" #include "ImageProcessing.h" #include "SmoothProcessDib.h" // SmoothProcessDib //IMPLEMENT_DYNAMIC(SmoothProcessDib, CWnd) CSmoothProcessDib::CSmoothProcessDib(CDib *pDib) { m_pDib = pDib; } CSmoothProcessDib::~CSmoothProcessDib(void) { } //BEGIN_MESSAGE_MAP(SmoothProcessDib, CWnd) //END_MESSAGE_MAP() // SmoothProcessDib 消息处理程序 BOOL CSmoothProcessDib::Middle_Smooth( ) { LPBYTE lpDst; // 指向缓存图像的指针 LPBYTE lpNewDIBBits; // 指向缓存DIB图像的指针 HLOCAL hNewDIBBits; int i,j,x,y,m; //循环变量 int flag=1; //循环标志变量 BYTE pixel[9],mid; //窗口像素值及中值 BYTE temp;//中间变量 LONG lWidth; LONG lHeight; LPBYTE lpDIBBits; //LPBYTE lpDIBBits=m_pDib->GetData();//找到原图像的起始位置 // LONG lWidth=m_pDib->GetWidth(); //获得灰度图像的宽度 //LONG lHeight=m_pDib->GetHeight(); //获得灰度图像的高度 //获得原图像的高度 // 暂时分配内存,以保存新图像 hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight); if (hNewDIBBits == NULL) { return FALSE; } lpNewDIBBits = (LPBYTE )LocalLock(hNewDIBBits); // 初始化新分配的内存,设定初始值为0 lpDst = (LPBYTE)lpNewDIBBits; memset(lpDst, (BYTE)0, lWidth * lHeight); //中值滤波 for(j=1;j<lHeight-1;j++) { for(i=1;i<lWidth-1;i++) { //把3*3屏蔽窗口的所有像素值放入pixel[m] m=0; for(y=j-1;y<=j+1;y++) for(x=i-1;x<=i+1;x++) { pixel[m]=lpDIBBits[y*lWidth+x]; m++; } //把pixel[m]中的值按降序排序 do{ flag=0; for(m=0;m<9;m++) { if(pixel[m]<pixel[m+1]) { temp=pixel[m]; pixel[m]=pixel[m+1]; pixel[m+1]=temp; flag=1; } } }while(flag==1); //求中值mid mid=pixel[4]; // 指向目标图像第j行,第i个像素的指针 lpDst = (LPBYTE)lpNewDIBBits + lWidth * j + i; //将中值赋给目标图像的当前点 *lpDst = mid; } } // 复制变换后的图像 memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight); //释放内存 LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits); return TRUE; } 错误指向了这:hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight); 这是中值滤波的程序 整个程序是可以运行的,就是中值滤波这块不能显示效果!直接弹回到程序。
adder01 2014-04-20
  • 打赏
  • 举报
回复
设置些断点监控下 'lHeight“变量。把出错部分代码贴上来,否则大家很难帮上忙的。
zhengdian10 2014-04-20
  • 打赏
  • 举报
回复
赋值之后别的文件里又出现问题,改完之后又弹出对话框,显示’Run-Time Check Failure #3 - The variable -------‘’下面是中断,继续,还有取消这三个按钮。这是什么问题啊?
worldy 2014-04-19
  • 打赏
  • 举报
回复
lHeight使用之前没有先给它赋值

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧