cv2.connectedComponents не обнаруживает компоненты

Я на Ubuntu, Python 2.7. Работа с OpenCV.

Я пытался понять, что именно делает функция cv2.connectedComponents. Это изображение:

Код:

import cv2
import numpy as np

img = cv2.imread('BN.tif', 0)

img = np.uint8(img)
_, markers = cv2.connectedComponents(img)

Из того, что я понял, эта функция создает массив того же размера, что и предоставленное изображение. Для каждого обнаруженного компонента назначьте один и тот же номер для всех (y,x) позиций для этого компонента. Если весь фон равен "0", то круг будет все "1", следующий квадрат - "2" и т. Д. Последний компонент должен быть "19". Я читаю количество компонентов, получая наибольшее число, определяющее компонент:

np.amax(markers)

Я должен получить 19, но я получаю 1.

Мой вопрос: почему я получаю только 1 компонент?

1 ответ

Решение

Это потому что cv2.connectedComponents() рассматривает только белую часть как компонент. Следовательно, вы получаете один компонент.

Вы должны инвертировать свое изображение. Вы можете сделать это с помощью cv2.bitwise_not() функция.

КОД:

import cv2
import numpy as np

img = cv2.imread('cc.png', 0)
ret, thresh = cv2.threshold(img, 127, 255, 0)

#---- Inverting the image here ----
img = cv2.bitwise_not(thresh)     
_, markers = cv2.connectedComponents(img)
print np.amax(markers)

РЕЗУЛЬТАТ:

19
Другие вопросы по тегам