Python-查找第一个和最后一个白色像素坐标

Python-查找第一个和最后一个白色像素坐标,python,loops,numpy,image-processing,iteration,Python,Loops,Numpy,Image Processing,Iteration,我需要帮助python编写一个循环,该循环遍历图像中的所有像素。我需要找到所有白色像素,并保存第一个检测到的像素和最后一个像素的坐标。图像是一个阈值图像(只有白色和黑色像素)。我做了一个嵌套循环,但我不知道如何进行评估 如果需要,可以使用嵌套循环,但这样做既慢又笨重。我建议使用numpy中内置的优化方法 假设您的图像是一个2dnumpy数组,黑色值为0,白色值为255,如下所示: image = np.random.choice([0,255], size=(10,10), p=[0.8, 0.

我需要帮助python编写一个循环,该循环遍历图像中的所有像素。我需要找到所有白色像素,并保存第一个检测到的像素和最后一个像素的坐标。图像是一个阈值图像(只有白色和黑色像素)。我做了一个嵌套循环,但我不知道如何进行评估

如果需要,可以使用嵌套循环,但这样做既慢又笨重。我建议使用
numpy中内置的优化方法

假设您的图像是一个2d
numpy
数组,黑色值为
0
,白色值为
255
,如下所示:

image = np.random.choice([0,255], size=(10,10), p=[0.8, 0.2])

>>> image
array([[  0,   0, 255,   0,   0,   0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0, 255,   0],
       [  0,   0,   0, 255,   0,   0,   0,   0,   0,   0],
       [  0, 255,   0, 255, 255,   0,   0,   0, 255, 255],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [255,   0,   0,   0, 255,   0,   0,   0,   0,   0],
       [  0, 255, 255,   0,   0,   0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [255,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [255, 255,   0,   0, 255, 255, 255, 255,   0, 255]])
white_pixels = np.array(np.where(image == 255))
first_white_pixel = white_pixels[:,0]
last_white_pixel = white_pixels[:,-1]
您可以找到白色值(值等于255)的第一个和最后一个坐标,如下所示:

image = np.random.choice([0,255], size=(10,10), p=[0.8, 0.2])

>>> image
array([[  0,   0, 255,   0,   0,   0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0, 255,   0],
       [  0,   0,   0, 255,   0,   0,   0,   0,   0,   0],
       [  0, 255,   0, 255, 255,   0,   0,   0, 255, 255],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [255,   0,   0,   0, 255,   0,   0,   0,   0,   0],
       [  0, 255, 255,   0,   0,   0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [255,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [255, 255,   0,   0, 255, 255, 255, 255,   0, 255]])
white_pixels = np.array(np.where(image == 255))
first_white_pixel = white_pixels[:,0]
last_white_pixel = white_pixels[:,-1]
因此:

>>> first_white_pixel
array([0, 2])
>>> last_white_pixel
array([9, 9])
或者,作为一个班轮:

first_white_pixel, last_white_pixel = np.array(np.where(image == 255))[:,[0,-1]].T

您可能不需要循环,但能否显示正在使用的数组类型?例如,一个5x5数组具有随机的“白色”和“黑色”像素,格式与您正在使用的真实数组相同?你想要的产量呢?谢谢!!这是完美的,正是我需要的,甚至更好,因为它是优化的。很高兴它有帮助!