資源簡介
對輸入的二值圖像,進行邊界跟蹤,實現輸出圖像的邊界,存在一維數組之中
代碼片段和文件信息
#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
- 上一篇:C++實現網絡嗅探器 規劃文檔
- 下一篇:C語言選修課系統設計
評論
共有 條評論