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