如何将所有白色像素的坐标追加到数组中? OpenCV Python

时间:2017-02-24 13:29:12

标签: python arrays opencv

如何将图片中白色像素的坐标附加到数组中?我希望将两条白线分成两个不同的阵列,然后计算两条线之间的最大和最小距离。我是OpenCV和Python的新手,所以任何帮助或代码示例都非常适合。

enter image description here

1 个答案:

答案 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)