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

A. *_*ony 3 python iteration loops numpy image-processing

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

sac*_*cuL 5

如果你愿意,你可以用嵌套循环来做,但这会很慢而且很笨重。我建议使用内置的优化方法numpy

假设您的图像是一个二维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]])
Run Code Online (Sandbox Code Playgroud)

您可以像这样找到白色值(值等于 255)的第一个和最后一个坐标:

white_pixels = np.array(np.where(image == 255))
first_white_pixel = white_pixels[:,0]
last_white_pixel = white_pixels[:,-1]
Run Code Online (Sandbox Code Playgroud)

结果是这样:

>>> first_white_pixel
array([0, 2])
>>> last_white_pixel
array([9, 9])
Run Code Online (Sandbox Code Playgroud)

或者,作为单班轮:

first_white_pixel, last_white_pixel = np.array(np.where(image == 255))[:,[0,-1]].T
Run Code Online (Sandbox Code Playgroud)