Как создать контур (с контролируемой толщиной) из изображения сегментации маски в Python? - PullRequest
2 голосов
/ 23 октября 2019

Mask Image

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

Я пытался использовать фильтр PIL FIND_EDGES, но он дает очень тонкие края дляконтур.

Есть ли способ преобразовать это изображение маски в изображение с помощью только контуров этих масок, где я могу контролировать толщину контура?

1 Ответ

1 голос
/ 23 октября 2019

Если я правильно понимаю, вы хотите найти контур всех капель, а затем нарисуйте этот контур на другом изображении с контролируемой толщиной контура. Вы можете сделать это с помощью cv2.drawContours() и контролировать толщину контура с помощью параметра thickness. Установка отрицательного значения, например. -1, заполнит контур, а увеличение параметра даст более толстый контур.

В этом примере мы находим контуры каждого шарика, используя cv2.findContours(), затем рисуем контур на маске, используя cv2.drawContours(). В вашем случае, вместо того, чтобы рисовать его на маске, вы можете нарисовать его на желаемое изображение. С thickness=2:

enter image description here

С thickness=5:

enter image description here

import cv2
import numpy as np

image = cv2.imread('1.png')
mask = np.ones(image.shape, dtype=np.uint8) * 255
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    cv2.drawContours(mask, [c], -1, (36, 255, 12), thickness=5)

cv2.imshow('mask', mask)
cv2.waitKey()
...