OpenCV - Использование открытой (не закрытой) линии контура Canny в качестве границы маски - PullRequest
0 голосов
/ 30 января 2020

Я прошу прощения, если я публикую в неправильном месте. Пожалуйста, дайте мне знать, если это так. В противном случае, я ценю любую помощь или указание.

У меня есть изображение объекта на фоне, который я хотел бы предварительно обработать, чтобы иметь только интересующую область. Я выполнил некоторую предварительную обработку, такую ​​как обрезка и усиление контраста, но теперь я хочу установить цвет фона solid. Я использую canny для генерации контурной линии между краем объекта и фона следующим образом:

example image

Теперь мне интересно, могу ли я каким-то образом использовать эту длинную линию посередине в качестве границы маски, которая будет покрывать все, что находится ниже указанной линии. Каждый пример, который я видел на этом сайте и в других местах, всегда использует контуры Канни, которые являются замкнутыми геометрическими c формами (такими как квадраты, круги и т. Д. c.)

Я пытался захватить контур с самой большой областью (в надежде, что он захватит верхнюю или нижнюю половину) следующим образом:

    cnts = cv2.findContours(img_edge_top.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        cnts = imutils.grab_contours(cnts)
        cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10]

        contour = max(cnts, key = cv2.contourArea)
        cv2.drawContours(img_blur_top, [contour], -1, (0, 255, 0), 3)
        cv2.imshow("contour", img_edge_top)
        cv2.waitKey(0)

Ниже показано исходное изображение:

enter image description here

Достаточно указать точку в правильном направлении или аналогичный пример. Спасибо

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