邻域生长主要是将种子图像提取出来,根据原图像中的连通性将目标生成出来


转载:http://blog.sina.com.cn/s/blog_5e0d222e0100kbju.html


typedef struct//保存种子像素
{
 int x;
 int y;
}seedpoint;
void Grow(IplImage* src,IplImage* seed, int gray)//gray=255
{
 stack<seedpoint>seedS;
 seedpoint point;
 // 获取图像数据,保存种子区域
 int height     = seed->height;
 int width      = seed->width;  
 int step       = seed->widthStep;  
 int channels   = seed->nChannels;  
 uchar* seed_data    = (uchar *)seed->imageData;
 uchar* src_data=(uchar *)src->imageData;
 for(int i=0;i<height;i++)
 {
  for(int j=0;j<width;j++)
  {
   if(seed_data[i*step+j]==255)
   {
    point.x=i;
    point.y=j;
    seedS.push(point);
   }
  }
 }
 while(!seedS.empty())
 {
  seedpoint temppoint;
  point=seedS.top();
  seedS.pop();
  if((point.x>0)&&(point.x<(height-1))&&(point.y>0)&&(point.y<(width-1)))
  {
   if((seed_data[(point.x-1)*step+point.y]==0)&&(src_data[(point.x-1)*step+point.y]==gray))
   {
    seed_data[(point.x-1)*step+point.y]=255;
    temppoint.x=point.x-1;
    temppoint.y=point.y;
    seedS.push(temppoint);
   }
   if((seed_data[point.x*step+point.y+1]==0)&&(src_data[point.x*step+point.y+1]==gray))
   {
    seed_data[point.x*step+point.y+1]=255;
    temppoint.x=point.x;
    temppoint.y=point.y+1;
    seedS.push(temppoint);
   }
   if((seed_data[point.x*step+point.y-1]==0)&&(src_data[point.x*step+point.y-1]==gray))
   {
    seed_data[point.x*step+point.y-1]=255;
    temppoint.x=point.x;
    temppoint.y=point.y-1;
    seedS.push(temppoint);
   }
   if((seed_data[(point.x+1)*step+point.y]==0)&&(src_data[(point.x+1)*step+point.y]==gray))
   {
    seed_data[(point.x+1)*step+point.y]=255;
    temppoint.x=point.x+1;
    temppoint.y=point.y;
    seedS.push(temppoint);
   }
  }
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值