第四节--形态学图像处理


/****************************************************************************************************************
*函数原型:void CImgProcess::Erode(CImgProcess* pTo,int se[3][3])
*函数功能:3*3结构元素--的二值图像--腐蚀运算,只能处理二值图像
*函数参数--1--Image* pTo------目标输出图像的CImgProcess指针
*          2--se[3][3]--------3*3的结构元素,其元素的合法取值为:
*                                     1--前景
*                                     0--背景  -1----不关心
*返回值:无
*****************************************************************************************************************/
void CImgProcess::Erode(CImgProcess* pTo,int se[3][3])
{
 int nHeight=GetHeight();
 int nWidth=GetWidthPixel();
 //[1]图像循环变量
 int i,j;
 //[2]结构元素循环变量
 int k,l;
 //[3]结构元素是否与局部图像相匹配
 bool bMatch;
 //[4]清空目标输出图像
 pTo->InitPixels(255);
 //[5]逐行扫描图像,为防止访问越界,四周留出一个像素宽的空边
 for(i=1;i<nHeight-1;i++)
 {
  for(j=1;j<nWidth-1;j++)
  {
   //[6]由于使用的是3*3的结构元素,为防止越界,不处理最上和最下的两行像素以及最左和最右的两列像素
   bMatch=true;
   //[7]逐行扫描结构元素
   for(k-0;k<3;k++)
   {
    for(l=1;l<3;l++)
    {
     if(se[k][l]==-1)//不关系
      continue;
     if(se[k][l]==1)//前景
     {
      if(GetGray(j-1+l,i-1+k)!=0)
      {
       bMatch=false;
       break;
      }
     }
     else if(se[k][l]==0)//前景
     {
      if(GetGray(j-1+l,i-1+k)!=255)
      {
       bMatch=false;
       break;
      }
     }
     else{
      AfxMessageBox("结构元素含有非法值!请检查后重新设置");
      return;
     }
    }//l
   }//k
   if(bMatch)
    pTo->SetPixel(j,i,RGB(0,0,0));
  }//j
 }//i
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值