Вы можете использовать функцию, которая подсчитывает количество подключенных компонентов.Есть реализованные варианты, и вы можете легко написать свой собственный.Вот пример кода:
def connected_components(image):
# list of tags we have used
tags = []
# current tag (remember 1 and 0 are already in image so start from 2)
tag = 2
# counter
cntr = 0
for i in range(image.shape[0]):
for j in range(image.shape[1]):
if image[i, j] != 0:
if i != 0 and j != 0 and image[i, j-1] != 0 and image[i-1, j] != 0 and image[i-1, j] != image[i, j-1]:
image[i, j] = image[i, j - 1]
tags.remove(image[i - 1, j])
cntr -= 1
image[image == image[i - 1, j]] = image[i, j]
elif i != 0 and image[i-1, j] != 0:
image[i, j] = image[i-1, j]
elif j != 0 and image[i, j-1] != 0:
image[i, j] = image[i, j-1]
else:
image[i, j] = tag
tags.append(tag)
tag += 1
cntr += 1
return image, tags, cntr
что делает этот код: мы перемещаемся на каждый пиксель и, если это новый пиксель со значением 1:
- , если на нем нет пикселяleft или right также равны 1, мы присваиваем ему новый тег.
- если пиксели слева от него или up также равны 1, мы присваиваем ему тот же тег, что и в
- если пиксели слева от него и вверх также равны 1:
- , мы присваиваем ему тот же тег, что и они, если они уже имеют тот же тег
- мы присваиваем ему тот же тег, что и один из них, и поворачиваем все пиксели со вторым тегом к первому тегу, чтобы они теперь составляли один элемент (поскольку они связаны этим пикселем)
вы также можете использовать предопределенные методы, такие как в этом примере .