图像高斯滤波问题~~谢谢大家了

HuajunC 2017-01-02 12:42:52
在MFC中 用来实现高斯滤波
void CCHJDoc::OnSmooth()
{
// TODO: Add your command handler code here
int i, j, m, n; //循环变量
int N = 16; //衰减因子
double temp; //中间变量
int templet[3][3] = {1,2,1,2,4,2,1,2,1}; //高斯平滑模板
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
LPSTR pic = FindDIBBits(lpDIB);
::GlobalUnlock((HGLOBAL) m_hDIB);

for(i=0; i<256; i++) //将原像素点保存在pixel中
{
for(j=0; j<256; j++)
{
pixel[i][j] = pic[i*256+j];
}
}

for(i=1; i<255; i++)
{
for(j=1; j<255; j++)
{
temp = 0;
for(m=0; m<3; m++)
{
for(n=0; n<3; n++)
{
temp += pixel[i+m-1][j+n-1]*templet[m][n];
}
}
temp /= N;
pic[256*i+j] = temp;
}
}
UpdateAllViews(NULL);
}
为什么变换后是这样的:如图
...全文
313 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2017-01-04
  • 打赏
  • 举报
回复
引用 楼主 love_snowin 的回复:
在MFC中 用来实现高斯滤波 void CCHJDoc::OnSmooth() { // TODO: Add your command handler code here int i, j, m, n; //循环变量 int N = 16; //衰减因子 double temp; //中间变量 int templet[3][3] = {1,2,1,2,4,2,1,2,1}; //高斯平滑模板 LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB); LPSTR pic = FindDIBBits(lpDIB); ::GlobalUnlock((HGLOBAL) m_hDIB); for(i=0; i<256; i++) //将原像素点保存在pixel中 { for(j=0; j<256; j++) { pixel[i][j] = pic[i*256+j]; } } for(i=1; i<255; i++) { for(j=1; j<255; j++) { temp = 0; for(m=0; m<3; m++) { for(n=0; n<3; n++) { temp += pixel[i+m-1][j+n-1]*templet[m][n]; } } temp /= N; pic[256*i+j] = temp; } } UpdateAllViews(NULL); } 为什么变换后是这样的:如图
很有艺术效果
向立天 2017-01-03
  • 打赏
  • 举报
回复
引用 2 楼 love_snowin 的回复:
BMP格式的不是也有RGB吗
有啊
shiter 2017-01-03
  • 打赏
  • 举报
回复
你原始图像是啥样子了?发上来看看
HuajunC 2017-01-02
  • 打赏
  • 举报
回复
引用 1 楼 xianglitian 的回复:
图像处理需要分RGB三个通道进行 现在好像没看出来你是分通道处理的
BMP文件也有RGB吗
HuajunC 2017-01-02
  • 打赏
  • 举报
回复
BMP格式的不是也有RGB吗
向立天 2017-01-02
  • 打赏
  • 举报
回复
图像处理需要分RGB三个通道进行 现在好像没看出来你是分通道处理的

19,468

社区成员

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

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