OpencvのcvFindContour関数を使用していますが、その中にパラメータRETR_TYPEが検索タイプを意味します。したがって、CV_RETR_LIST
、CV_RETR_TREE
、CV_RETR_EXTERNAL
の違いは何ですか?
findContours
のドキュメント を見てください。
主な違いは、返されるhierarchy
にあります(1つの輪郭と次の輪郭の関係を示します)。
CV_RETR_EXTERNAL
は「外側の」輪郭を与えるので、(たとえば)ある輪郭が別の輪郭を囲んでいる場合(同心円のように)、最も外側の輪郭だけが与えられます。CV_RETR_LIST
はすべての輪郭を示し、hierarchy
の計算もしません。輪郭だけが必要で、輪郭が別の輪郭の中にネストされているかどうかを気にしない場合に適しています。CV_RETR_CCOMP
輪郭を与え、それらを外側と内側の輪郭に編成します。すべての輪郭は、オブジェクトの輪郭、またはオブジェクトの輪郭のいずれかですinside別のオブジェクト(つまり、穴)。 hierarchy
はそれに応じて調整されます。これは、(たとえば)すべての穴を見つけたい場合に役立ちます。CV_RETR_TREE
等高線の完全な階層を計算します。つまり、object1はobject2内に4レベル深くネストされており、object3も4レベル深くネストされていると言えます。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.1