逆滤波的方法进行图像复原后出现白色斑点应该怎么去除? visual c++图像复原逆滤波中值滤波 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 lHeight使用之前没有先给它赋值 赋值之后别的文件里又出现问题,改完之后又弹出对话框,显示’Run-Time Check Failure #3 - The variable -------‘’下面是中断,继续,还有取消这三个按钮。这是什么问题啊? 设置些断点监控下 'lHeight“变量。把出错部分代码贴上来,否则大家很难帮上忙的。 #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);这是中值滤波的程序整个程序是可以运行的,就是中值滤波这块不能显示效果!直接弹回到程序。 你的代码把上面一些屏蔽了, 所以不对, 这个逻辑很基础....//LPBYTE lpDIBBits=m_pDib->GetData();//找到原图像的起始位置 // LONG lWidth=m_pDib->GetWidth(); //获得灰度图像的宽度//LONG lHeight=m_pDib->GetHeight(); //获得灰度图像的高度 //获得原图像的高度 OpenGL中的阴影效果实现 多线程关闭问题 谢谢! 原来我的信誉分现在这么低啊。。。。 关于PeekMessages和GetMessage的区别 activex的入门,很简单的问题请教 两个视图间传递消息问题 theApp如何获得文档指针? MFC编写扫雷程序 如何让托盘图标默认不隐藏 关于SQL语句的编写,多表连接查询显示最新日期的内容 安装WinDDK后,fatal error C1083: 无法打开包括文件:"devioctl.h" CRichEditCtrl 单行显示字符个数
#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);
这是中值滤波的程序
整个程序是可以运行的,就是中值滤波这块不能显示效果!直接弹回到程序。
// LONG lWidth=m_pDib->GetWidth(); //获得灰度图像的宽度
//LONG lHeight=m_pDib->GetHeight(); //获得灰度图像的高度 //获得原图像的高度