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

时间:2018-03-10 19:29:32

标签: python loops numpy image-processing iteration

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

1 个答案:

答案 0 :(得分:2)

如果你愿意,你可以 使用嵌套循环来做这件事,但这会慢而且笨重。我建议使用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]])

您可以找到白色值的第一个和最后一个坐标(值等于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