如下图的二维数组,要获得所有的最外围的值不为0的坐标。
其代码如下:
python
import cv2
import numpy as np
#2.找矩阵save_list边界的位置
#输入为save_list,输出为剩下边界坐标的save_list
def boundary(s):
print(s)
list1={}#按照横坐标从小到大的顺序的坐标位置
list2=[]
for i in range(len(s)):
list1[str(i)]=[]
for j in range(len(s[0])):
if s[i][j]!=0:
list1[str(i)].append((i,j))
list2.append((i,j))
list2=sorted(list2,key=lambda x:x[1])
list_over={}#按照纵坐标从小到大的顺序的坐标位置
for item in list2:
if str(item[1]) not in list_over:
list_over[str(item[1])]=[]
list_over[str(item[1])].append(item)
else:
list_over[str(item[1])].append(item)
print(list1)
print(list_over)
#以上代码获得了两个字典
#下面获得该矩阵最外围的坐标
save_list=[]
for item in list1:
#print(item)
if len(list1[item])==1:
save_list.append(list1[item][0])
else:
save_list.append(list1[item][0])
save_list.append(list1[item][-1])
for item in list_over:
if list_over[item][-1] not in save_list:
save_list.append(list_over[item][-1])
save_list=sorted(save_list)
return save_list
if __name__ == '__main__':
data1 = [
[0, 0, 0, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 0, 0, 0]
]
save_list=boundary(data1)
print(save_list)