cvFindContoursのmodeパラメタとmethodパラメタ

cvFindContoursは与えられた2値化済み画像の輪郭を抽出してCvMemStorageに格納してくれるのだが、パラメタによって抽出した輪郭の格納の方法(構造)が違う。
cvFindcontours - Structural Analysis and Shape Descriptors ― OpenCV v2.4.2 documentation

modeパラメタ
  • CV_RETR_EXTERNAL

最外周の輪郭のみ抽出する

  • CV_RETR_LIST

全ての輪郭をフラットな(階層の無い)リスト構造に抽出する

  • CV_RETR_CCOMP

輪郭を外縁と内縁(穴)の二つの階層構造に抽出する

  • CV_RETR_TREE

全ての輪郭を木構造として抽出する

また、輪郭の抽出時座標のサンプルに使用する方法をmethodパラメタで指定する。

methodパラメタ
  • CV_CHAIN_APPROX_NONE

 輪郭が検出された全ての座標を使用する

  • CV_CHAIN_APPROX_SIMPLE

 検出された座標の水平、垂直、斜めのセグメントを圧縮して、それらの終端の座標を使用する

  • CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS

Teh-Chin氏らのチェーン近似アルゴリズムを使用する※

このようにcvFindContoursは入力画像、modeパラメタ、methodパラメタの指定によって抽出される輪郭がかなり変わることが考えられる。
恐らくは様々な用途で使うために汎用的なファンクションとして定義されているのだろうが、このような特質からサンプルコードをそのまま使っても自分の目的に叶うとは限らないだろう。

※Teh, C.H. and Chin, R.T., On the Detection of Dominant Points on Digital Curve. PAMI 11 8, pp 859-872 (1989)