輪郭検出 (Contour Retrieval)

int cvFindContours(
    CvArr* image,                        //
    CvMemStorage* storage,               //
    CvSeq** first_contour,               //
    int header_size=sizeof( CvContour ), //
    int mode=CV_RETR_LIST,               //
    int method=CV_CHAIN_APPROX_SIMPLE,   //
    CvPoint offset=cvPoint( 0, 0 )       //
    );
FindContours - OpenCV 1.0 リファレンス - opencv.jp

得られた輪郭は、cvDrawContours()関数で確認できます。

抽出モード

どのような輪郭を、どのようなデータ構造で格納するかを指定します。

mode (contour retrieval mode)
定数 説明
CV_RETR_EXTERNAL 最も外側の輪郭のみ抽出する。
CV_RETR_LIST すべての輪郭を抽出し、リストに追加する。
CV_RETR_CCOMP すべての輪郭を抽出し、二つのレベルを持つ階層構造を構成する。1番目のレベルは連結成分の外側の境界線、2番目のレベルは穴 (連結成分の内側に存在する) の境界線。
CV_RETR_TREE すべての輪郭を抽出し、枝分かれした輪郭を完全に表現する階層構造を構成する。

近似手法

method (contour approximation method)
定数 説明
CV_CHAIN_CODE 出力はフリーマン チェーンコード (Freeman chaincode) で表現される。他の手法ではポリゴン (頂点のシーケンス) で表現する。
CV_CHAIN_APPROX_NONE すべての点をチェーンコードから点に変換する。
CV_CHAIN_APPROX_SIMPLE 水平・垂直・斜めの線分を圧縮する。すなわち、この関数はそれぞれの端点のみを残す。
CV_CHAIN_APPROX_TC89_L1 Teh-Chinチェーンの近似アルゴリズム中の一つを適用する。
CV_CHAIN_APPROX_TC89_KCOS
CV_LINK_RUNS

値1の水平セグメントの接続に基づく、異なる輪郭を抽出する全く異なるアルゴリズムを適用する。

※抽出モードがCV_RETR_LISTの場合のみ指定可能

元画像

検出結果