• 大小: 8KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: C/C++
  • 标签: 边界跟踪  vc++  

资源简介

对输入的二值图像,进行边界跟踪,实现输出图像的边界,存在一维数组之中

资源截图

代码片段和文件信息




#include 
using namespace std;


//设输入图像为t[][],使用p[]来存储边界像素序列 
//设方向搜索的初值为dir0为5

//全局变量 
 





//为了使图像操作不越界,在图像四周添加一圈0像素
int t[7][7]={
0000000
0000000
0011000
0011100
0111110
0011100
0000000};


int tx[7][7]={0};//输出图像初始化

struct d{
        int m;
        int n;};

d p[100];   //用于存储边界点序列



int tt[7][7]={0};
int flag=0;
int k=0;
int dir=5;

void lujing(int iint jint aint bint dir);

void print()    //输出图像
{
 for(int x=1;x<=k;x++)
   {tx[p[x].m][p[x].n]=1;}

   for(x=0;x<=7;x++)
   {
   for(int y=0;y<=7;y++)
         cout<        cout<    }
}

void dirc5(int iint jint aint b)
{    
if(a==i+1&&b==j-1)
{print();
    exit(0);}
     
     else if(t[i+1][j-1]>0)                      //方向5 
 {
    
 k++;
 flag=1;
     cout<<“左下方向(“<     p[k].m=i+1;
 p[k].n=j-1;

     dir=(5+6)%8;
lujing(i+1j-1abdir);
return;
}

}
//诡异事件!!!!  先用 i,j点给p[][]赋值 赋不上,而先cout<void dirc6(int iint jint aint b)

{    if(a==i+1&&b==j)
      {print();
      exit(0);}
     
     else if(t[i+1][j]>0)//方向6
 {
 
  k++;
 flag=1;
  
   
 cout<<“正下方向(“<     
 p[k].m=i+1;
 p[k].n=j;
   
   dir=(6+7)%8;
  
lujing(i+1jabdir);
 return;
 }

}


void dirc7(int iint jint aint b)
{    if(a==i+1&&b==j+1) 
      {print();
      exit(0);}
     

     else if(t[i+1][j+1]>0&&(a!=i+1||b!=j+1))//方向7
 {
 k++;
 flag=1;

  cout<<“右下方向(“<     p[k].m=i+1;
 p[k].n=j+1;

 dir=(7+6)%8;
     lujing(i+1j+1abdir);
   return;}


}


void  dirc0(int iint jint aint b)
{    
 if(a==i&&b==j+1)   
 {print();
         exit(0);}
     

     else if(t[i][j+1]>0)//方向0
 {
    
 k++;
 flag=1;
     cout<<“正右方向(“<     p[k].m=i;
 p[k].n=j+1;

 dir=(0+7)%8;
 lujing(ij+1abdir);
 return;}
  

}

void dirc1(int iint jint aint b)
{   
    if(a==i-1&&b==j+1)
    {print();
    exit(0);}
     
 
else if(t[i-1][j+1]>0)//方向1
 {
 k++;
 flag=1;
  cout<<“右上方向(“<     p[k].m=i-1;
 p[k].n=j+1;

 dir=(1+6)%8;
 lujing(i-1j+1abdir);
 return;}

}

void dirc2(int iint jint aint b)
{   
    if(a==i&&b==j+1)  
{print();
         exit(0);}
     

   else if(t[i][j+1]>0)//方向2
 {
 
    
 k++;
 flag=1;
 cout<<“正上方向(“<     p[k].m=i;
 p[k].n=j+1;

 dir=(2+7)%8;
 lujing(ij+1abdir);
 return;}
  }

void dirc3(int iint jint aint b)
{    
 if(a==i-1&&b==j-1)
      {print();
       exit(0);}
     

else if(t[i-1][j-1]>0)//方向3
 {

 k++;
     flag=1;
  cout<<“左上方向(“<
 p[k].m=i-1;
 p[k].n=j-1;

 dir=(3+6)%8;
 lujing(i-1j-1abdir);
 retur

评论

共有 条评论