Да, это должно работать для вас.Если «wshed» будет вашим входным изображением для функции findContours()
.Если вы считаете, что возможно наличие вложенных областей, вы должны использовать CV_RETR_TREE
, если вы хотите обрабатывать их особым образом, CV_RETR_LIST
, если вы хотите обрабатывать области в регионе, либо CV_RETR_EXTERNAL
, еслиВы хотите игнорировать все вложенные регионы.См. Документ и Пример для использования.
РЕДАКТИРОВАТЬ 1.0:
Чтобы ответить на ваши изменения: круговые контуры будут иметь один внешний и один внутренний контур,Поэтому, если вы используете CV_RETR_TREE
и проверяете для каждого контура, есть ли внутри другой контур, это круговой контур, и вы можете сохранить его и удалить все остальные контуры.См. здесь в разделе 4. RETR_TREE или здесь для использования
РЕДАКТИРОВАТЬ 2.0: Кажется, я вас неправильно понял.Под «круговым» в Edit 1.0 я имел в виду закрытые объекты.Теперь я не уверен, что вы имеете в виду с круговой.Если выпуклости достаточно, я бы привел вас к convecHull
и convexityDefects
.
Если вам действительно необходимо иметь форму круга / овала, то япопытался бы вычислить параметры овала или круга на основе контура и нарисовать идеальный круг / овал на основе этого и сравнить контур с ним.Но, может быть, есть лучшие способы для этого.В этом случае я бы порекомендовал вам задать его как новый вопрос, поскольку он не имеет ничего общего с темой этого вопроса.