Python 如何将所有白色像素的坐标附加到数组中?人脸检测原理及示例

Python 如何将所有白色像素的坐标附加到数组中?人脸检测原理及示例,python,arrays,opencv,Python,Arrays,Opencv,如何将图片中白色像素的坐标附加到数组中?我想把两条白线分成两个不同的阵列,然后计算两条线之间的最大和最小距离。我对OpenCV和Python非常陌生,因此非常感谢您提供的任何帮助或代码示例 下面的代码中所做的是,我们使用递归获得所有相邻的白色,从而覆盖整个“行”。递归很容易,我们只需要得到相邻的单元格,维护一个检查数组,工作就完成了 接下来,我们需要将它们放在两个单独的数组中。为此,我们遍历图像,如果第一个数组的长度为0,则将其传递给递归函数,即未向其添加任何内容,否则将传递第二个数组 对不起,

如何将图片中白色像素的坐标附加到数组中?我想把两条白线分成两个不同的阵列,然后计算两条线之间的最大和最小距离。我对OpenCV和Python非常陌生,因此非常感谢您提供的任何帮助或代码示例


下面的代码中所做的是,我们使用递归获得所有相邻的白色,从而覆盖整个“行”。递归很容易,我们只需要得到相邻的单元格,维护一个检查数组,工作就完成了

接下来,我们需要将它们放在两个单独的数组中。为此,我们遍历图像,如果第一个数组的长度为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)
##让图像成为您的二维图像阵列
检查\u arr=numpy.zeros(形状=(行,列))
arr1=[]
arr2=[]
def get_Neighbor_White(x、y、arr):
def get_相邻_单元(自身、x_坐标、y_坐标):
结果=集合()
对于k,l in[(x_coord+i,y_coord+j)对于i in(-1,0,1)对于j in(-1,0,1),如果i!=0或j!=0]:

如果k>=0,k=0,l下面的代码中所做的是,我们使用递归得到所有相邻的白色,从而覆盖整个“行”。递归很容易,我们只需要得到相邻的单元格,维护一个检查数组,工作就完成了

接下来,我们需要将它们放在两个单独的数组中。为此,我们遍历图像,如果第一个数组的长度为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)
##让图像成为您的二维图像阵列
检查\u arr=numpy.zeros(形状=(行,列))
arr1=[]
arr2=[]
def get_Neighbor_White(x、y、arr):
def get_相邻_单元(自身、x_坐标、y_坐标):
结果=集合()
对于k,l in[(x_coord+i,y_coord+j)对于i in(-1,0,1)对于j in(-1,0,1),如果i!=0或j!=0]:

如果k>=0和k=0,并且对响应进行了验证,这非常有用!几乎可以工作了,但是看起来两行的所有白点都存储在array2中,而array1中只有一个点,你知道为什么吗?还有一个关于您的代码的问题,当您在(-1,0,1)
中有i的
时,为什么
(-1,0,1)
?为什么
检查arr[x,y]
等于
1
?感谢您的帮助,非常感谢:)您的欢迎。。检查_arr[x,y]=1表示我们已经访问了它,因此不需要再次访问它。这是为了防止无限递归。(-1,0,1)用于相邻点。查看此线程了解更多信息,因为图像不是二进制的。当我把它放在电脑上时,它给出了以下颜色值[0,1,2,3,4,5,6,7,8,9,10,11,12,13,242,243,244,245,246,247,248,249,250,251,252,253,254,255]。你可以设置它的阈值,使它只有0和255作为颜色,然后大部分代码会在我这端工作。。是的,没错。。它所做的是将arr1的引用传递给函数,然后函数递归地附加所有相邻的白点,依此类推,直到将整行附加到它。根据我的解决方案,用你的图片运行了这段精确的代码,效果非常好。请检查一下。谢谢你的回复,这非常有帮助!几乎可以工作了,但是看起来两行的所有白点都存储在array2中,而array1中只有一个点,你知道为什么吗?还有一个关于您的代码的问题,当您在(-1,0,1)
中有i的
时,为什么
(-1,0,1)
?为什么
检查arr[x,y]
等于
1
?感谢您的帮助,非常感谢:)您的欢迎。。检查_arr[x,y]=1表示我们已经访问了它,因此不需要再次访问它。这是为了防止无限递归。(-1,0,1)用于相邻点。查看此线程了解更多信息,因为图像不是二进制的。当我把它放在电脑上时,它给出了以下颜色值[0,1,2,3,4,5,6,7,8,9,10,11,12,13,242,243,244,245,246,247,248,249,250,251,252,253,254,255]。你可以设置它的阈值,使它只有0和255作为颜色,然后大部分代码会在我这端工作。。是的,没错。。它所做的是将arr1的引用传递给函数,然后函数递归地附加所有相邻的白点,依此类推,直到将整行附加到它。根据我的解决方案,在你的图像上运行了这段精确的代码,效果非常好,请检查。。