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

5

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


你可能不需要循环,但是能否展示一下你正在使用的数组类型?例如,一个5x5的数组,其中包含随机的“白色”和“黑色”像素,格式与你实际使用的相同?还有你期望的输出是什么? - sacuL
1个回答

6

如果你愿意,你可以使用嵌套循环来完成这件事,但那样会很慢且不够优雅。我建议使用内置于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]])

您可以通过以下方式找到白色值(值等于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

1
谢谢!这太完美了,正是我所需要的,而且还优化了。 - A. Antony
很高兴能帮到你! - sacuL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接