Любой способ слияния BLOB-объектов в OpenCV Python - PullRequest
0 голосов
/ 03 июня 2019

У меня есть эта картина ниже. Я хочу объединить две капли вместе, чтобы получить окончательный контур человека.

Image1

enter image description here

Я попробовал методы расширения и эрозии, чтобы заставить эти капли соединяться, но контур сохраняется.

    img = cv2.imread(folder+i)
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
    dil = cv2.dilate(img, kernel, iterations=5)
    fin = cv2.erode(dil, kernel, iterations=5)
    gray = cv2.cvtColor(fin, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(gray, 127, 255, 0)
    im_floodfill = thresh.copy()
    h, w = thresh.shape[:2]
    mask = np.zeros((h + 2, w + 2), np.uint8)
    cv2.floodFill(im_floodfill, mask, (0, 0), 255);
    im_floodfill_inv = cv2.bitwise_not(im_floodfill)
    im_out = thresh | im_floodfill_inv

    cv2.imshow("test", im_out)
    cv2.waitKey(0)

Out1

Out1 выводит то, что я хочу, но в enter image description here

В случае возникновения проблем.

Существуют ли другие приемы, которые я могу использовать, не искажая контур.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Попробуйте использовать морфологию змей: здесь или здесь .

0 голосов
/ 03 июня 2019

Есть несколько способов, которые вы можете попробовать

  1. Как уже упоминалось, морфологическое закрытие должно быть в состоянии закрыть небольшой разрыв. Но часть содержимого формы (например, подмышки) будет уничтожена. И это не будет работать хорошо, если верх и низ находятся слишком далеко друг от друга.

  2. Улучшение результата сегментации ввода. Это можно сделать разными способами. Например. Если у вас есть проблемы с другими фонами, используйте семантическую модель глубокого обучения и наложите результат сегментации. другие, такие как предварительная форма или модель энергии змеи, чтобы удалить маленькое отверстие, как я уже сказал, есть много методов

это 2 изображения показывает, что семантическая модель может получить довольно хороший контур фигуры человека. Так что используйте его с вашим предыдущим обнаружением (которое я предполагаю из модели bgfg) enter image description here enter image description here

3 Используйте другие инструменты для автоматического соединения тела и ноги. Например. Если нижний блок полностью отсутствует, и вы не можете использовать Morph close, чтобы связать их. Используйте анализ основных компонентов на ноге. Затем добавьте один блок белого поверх части ноги. Вытяните ногу наверх.

Это похоже на добавленную вручную заблокированную деталь в карте сетки GMAPPING, чтобы предотвратить запланированный путь в некоторой области в робототехнике.

Существует слишком много способов достичь этого. Не ограничивайтесь своим воображением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...