2012-01-12 4 views
12

Używam funkcji cvFindContour z opencv i tam jest parametr RETR_TYPE oznacza typ retrivel, stąd nie dostaję jaka jest różnica między CV_RETR_LIST, CV_RETR_TREE, CV_RETR_EXTERNAL?różnica między CV_RETR_LIST, CV_RETR_TREE, CV_RETR_EXTERNAL?

+0

Tu jest link do książki [OpenCV] (http://books.google.co.jp/books? ID = seAgiOfu2EIC & pg = PA236 i gazowe = PA236 i dq = CV_RETR_LIST, CV_RETR_TREE, CV_RETR_EXTERNAL i źródło = Bl OTS = hSF68jiEN9 i porządek = EukC6H9XafAm89zOkkw7UiFWvAc & hl = pl & sa = X & ei = pnQOT87GH-mimQWjn8TDAw i redir_esc = Y # v = onepage & Q = CV_RETR_LIST% 2CCV_RETR_TREE% 2CCV_RETR_EXTERNAL & f = fałsz), co wyjaśnia różnice (str 236- 237) –

+1

Możesz znaleźć więcej szczegóły na temat tego artykułu: http://opencvpython.blogspot.com/2013/01/contours-5-hierarchy.html –

Odpowiedz

16

Spójrz na the documentation for findContours.

Główna różnica to hierarchy, która jest zwracana (co daje związek między jednym konturem a następnym).

  • CV_RETR_EXTERNAL daje „zewnętrzny” kontury, więc jeśli masz (powiedzmy) jeden kontur załączając innego (jak koncentrycznych kręgów), tylko najbardziej zewnętrzna jest podana.
  • daje wszystkie kontury i nawet nie przejmuje się obliczaniem hierarchy - dobrze, jeśli chcesz tylko kontury i nie dbasz o to, czy jeden jest zagnieżdżony w innym.
  • CV_RETR_CCOMP daje kontury i organizuje je w zewnętrzne i wewnętrzne kontury. Każdy kontur jest albo konturem obiektu, albo obrysem obiektu innego obiektu (to znaczy dziury). hierarchy jest odpowiednio dostosowany. Może to być przydatne, jeśli (powiedzmy) chcesz znaleźć wszystkie dziury.
  • CV_RETR_TREE oblicza pełną hierarchię konturów. Można więc powiedzieć, że obiekt1 jest zagnieżdżony 4 poziomy głęboko w obiekcie2, a obiekt3 jest również zagnieżdżony na 4 poziomach.
0

Od 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