2014-01-14 5 views
4

У меня возникли проблемы с findContours в opencv. На выходе слишком много данных, и я знаю, что правильное использование иерархии - это ключ. Учитывая изображение ниже от OpenCV документы:Повторяющиеся контуры в opencv

Opencv Docs

Я хотел бы сделать все контуры для 2а и 3а исключением. Каков правильный путь прохождения иерархии и findContour аргументы для достижения этого результата?

+0

Вы можете разделить исходное изображение? – karlphillip

+0

Не черное изображение сверху с белыми линиями и красными цифрами? Если нет, исходное изображение можно найти в верхней части страницы [ЗДЕСЬ] (http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_contours/py_contours_hierarchy/py_contours_hierarchy.html) –

+0

Я думал, что красный номера были специально добавлены для иллюстрации того, какие контуры вы пытались обнаружить. – karlphillip

ответ

6

Контуры, найденные функцией findContours, имеют направление. Объекты идут против часовой стрелки, а отверстия - по часовой стрелке. Поэтому, если вы проверяете подписанную область каждого контура, вы узнаете, является ли это дырой или нет ее знаком. Подписана площадь контура может быть рассчитана следующим образом:

contourArea(contour, true); 

Конечно, используя иерархию хороший подход, как хорошо, но я думаю, что этот подход проще для понимания и реализации.

+0

Для моих нужд это чистые и работают с точностью до 85%. Я попытался добавить скелет (как было предложено выше) в микс, но результат был слишком минимальным. У меня есть несколько двойных строк, но ничего подобного раньше. Спасибо! –

0

Добавление к тому, что сказал @Michael Burdinov, возвращает анолит и католит значения для объектов или holdes

Смежные вопросы