Почему функция cv2.connectedComponents () не находит все компоненты? - PullRequest
0 голосов
/ 02 февраля 2020

В настоящее время я реализую алгоритм удаления теней и хочу пометить все отдельные области теней. Для этого я использую функцию cv2.connectedComponents (). Я ввожу свою теневую маску и в качестве вывода хочу обозначить области теней.

Входное изображение:

Input shadow mask

Выходное изображение:

Output image

Как вы можете видеть, она правильно маркирует нижнюю часть, но в верхней части некоторые области отсутствуют. Что я здесь не так делаю? Я использую код от здесь :

def applyShadowRemoval(image, shadow_map, filename, debug = False):
    b,g,r,nir = cv2.split(image)
    rgb_image = np.stack([b,g,r], axis=2)

    ret, labels = cv2.connectedComponents((1-shadow_map[0]))

    label_hue = np.uint8(179*labels/np.max(labels))
    blank_ch = 255*np.ones_like(label_hue)
    labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])

    # cvt to BGR for display
    labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)
    labeled_img[label_hue==0] = 0
    if(debug == True):
        cv2.imwrite('images/' + filename[:-4] + "_labeled_components.png", labeled_img[0:1000, 0:1000])

    return labeled_img
...