Подтвердить что ты не робот

Разница между CV_RETR_LIST, CV_RETR_TREE, CV_RETR_EXTERNAL?

Я использую функцию cvFindContour для opencv, и в ней есть параметр RETR_TYPE означает тип извлечения, поэтому я не понимаю, в чем разница между CV_RETR_LIST, CV_RETR_TREE, CV_RETR_EXTERNAL?

4b9b3361

Ответ 1

Посмотрите документацию для findContours.

Основное отличие заключается в возвращаемом hierarchy (дающем соотношение между одним контуром и следующим).

  • CV_RETR_EXTERNAL дает "внешние" контуры, поэтому, если у вас есть (скажем) один контур, окружающий другой (например, концентрические круги), дается только самая внешняя.
  • CV_RETR_LIST дает все контуры и даже не утруждает вычислениям hierarchy - хорошим, если вы хотите только контуры и не заботитесь, вложен ли он внутри другого.
  • CV_RETR_CCOMP дает контуры и организует их во внешние и внутренние контуры. Каждый контур является либо контуром объекта, либо контуром объекта внутри другого объекта (т.е. Отверстия). Соответственно отрегулируется hierarchy. Это может быть полезно, если (скажем) вы хотите найти все дыры.
  • CV_RETR_TREE вычисляет полную иерархию контуров. Таким образом, вы можете сказать, что object1 вложен в 4 уровня глубоко внутри объекта2, а object3 также вложен в 4 уровня.

Ответ 2

От imgproc.cpp:

//! mode of the contour retrieval algorithm
enum RetrievalModes {
    /** retrieves only the extreme outer contours. It sets `hierarchy[i][2]=hierarchy[i][3]=-1` for
    all the contours. */
    RETR_EXTERNAL  = 0,
    /** retrieves all of the contours without establishing any hierarchical relationships. */
    RETR_LIST      = 1,
    /** retrieves all of the contours and organizes them into a two-level hierarchy. At the top
    level, there are external boundaries of the components. At the second level, there are
    boundaries of the holes. If there is another contour inside a hole of a connected component, it
    is still put at the top level. */
    RETR_CCOMP     = 2,
    /** retrieves all of the contours and reconstructs a full hierarchy of nested contours.*/
    RETR_TREE      = 3,
    RETR_FLOODFILL = 4 //!<
};

OpenCV 2.4.13