matlab函数:B=bwboundaries(img);
使用栈实现代码:
close all;clear all;
img = imread('G:/bound.jpg');
img = rgb2gray(img);
img = im2bw(img);
img=im2bw(img);
B=bwboundaries(img);%库函数结果
[m,n]=size(img);
k=1;
flag=0;
for i=1:m %找到第一个不为0元素位置
for j=1:n
if img(i,j)>0
stack(k,1)=i;
stack(k,2)=j;
starti=i; %标记第一个点
startj=j;
dir=7;
k=k+1;
flag=1; %表示已经找到了第一个元素
break;
end
end
if flag==1
break;
end
end
while 1
if mod(dir,2)==0
dir=mod(dir+7,8); %偶数处理方式
else
dir=mod(dir+6,8); %奇数的处理方式
end
i=stack(k-1,1);
j=stack(k-1,2);
while 1
flag=1;
switch dir
case 0
if j+1<n+1&&