Как игнорировать внутренние черные контуры в OpenCV Python? - PullRequest
0 голосов
/ 13 ноября 2018

На изображении выше мне нужны только следующие контуры: 8, 7, 0, 2, 4.

Каждый другой контур черныйпустые коробки внутри них.Есть ли способ автоматического извлечения только таких контуров с помощью cv2.RETR_TREE?

cv2.RETR_EXTERNAL будет игнорировать 2 и 4, которые мне действительно нужны

       >>heirarchy

       >>array([[[ 7, -1,  1, -1],

        [-1, -1,  2,  0],

        [-1, -1,  3,  1],

        [-1, -1,  4,  2],

        [-1, -1,  5,  3],

        [ 6, -1, -1,  4],

        [-1,  5, -1,  4],

        [ 8,  0, -1, -1],

        [-1,  7, -1, -1]]])

Как я могу извлечь из вышеупомянутой иерархиитолько внешние контуры, но не исключая 2 и 4 и игнорируя 1, 3, 5, 6, поскольку эти четыре контура содержат только пустые области внутри?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Если вы можете использовать любой другой метод, кроме cv2.RETR_TREE, тогда вы можете использовать cv2.RETR_CCOMP, который разделяет контуры только в двухуровневой иерархии, т.е. внешней и внутренней. Вы можете выбрать только те контуры, родительский индекс которых (значение по индексу 3) равен -1. «-1» означает, что у контуров нет родителя. Вы получите только следующие контуры: 8, 7, 0, 2, 4.

Ссылка: https://docs.opencv.org/3.4/d9/d8b/tutorial_py_contours_hierarchy.html

0 голосов
/ 14 ноября 2018

Вы можете использовать cv2.contourArea(contour), чтобы получить площадь контура, а затем установить условие минимальной площади, чтобы избавиться от слишком маленьких контуров.

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