答案 0 :(得分:2)
在下面的代码中完成的是我们使用递归来获取所有相邻的白色,从而覆盖整个“线”。递归很简单,我们只需要获取相邻的单元格,维护一个校验数组并完成工作。
接下来,我们需要将它们放在2个独立的数组中。为此,我们遍历图像并将第一个数组传递给递归函数,如果它的长度为0,即没有添加任何内容,否则传递第二个数组。
代码尚未经过测试我很抱歉。这也涉及递归等概念,也有点棘手。如果有任何错误或您无法理解任何部分,请在评论中通知我。我最早会回复你的。感谢
您的结果坐标存储在arr1和arr2中。
## let image_arr be your 2d image array
check_arr = numpy.zeros(shape=(rows,cols))
arr1 = []
arr2 = []
def get_neighbour_whites(x,y,arr):
def get_adjacent_cells( self, x_coord, y_coord ):
result = set()
for k,l in [(x_coord+i,y_coord+j) for i in (-1,0,1) for j in (-1,0,1) if i != 0 or j != 0]:
if k>=0 and k<rows and l>=0 and l<cols:
result.add((k,l))
return result
check_arr[x,y] = 1
arr.append((x,y))
adj_cells = get_adjacent_cells(x,y)
for i,j in adj_cells:
if image_arr[i,j]==255 and not check_arr[i,j]:
get_neighbour_whites(i,j,arr)
for x in xrange(rows):
for y in xrange(cols):
if image_arr[x,y] == 255 and not check_arr[x,y]:
get_neighbour_whites(x,y,arr1 if len(arr1)==0 else arr2)