cvFindContoursのmodeパラメタを変えて実行してみた
昨日のエントリで書いたcvFindContoursのmodeパラメタだが、解説するよりも実際に動かした結果を見たほうが分かりやすい。なので実際に試してみた。
方法としては今まで紹介してきたようにcvCvtColorでグレイスケール化→cvThresholdを使って二値化した画像を元にcvFindContoursで抽出した輪郭をcvDrawContours関数で別なIplImageに描画している。(コードは長いので割愛する)なお、同ファンクションのmethodパラメタはCV_CHAIN_APPROX_NONEつまり全ての座標を使うに固定している。
以下は全てXcode 4.5, iPhone 5.0 シミュレータで実行した結果。
CV_RETR_TREE
輪郭の階層を赤と青に分けているのでCV_RETR_CCOMPとCV_RETR_TREEの違いが分からないのは、私が無精をして色分けを外縁と内縁の二つにしか分けていないからだ。
なので、この二つをそれぞれ輪郭のレベルで色を分けてその色で輪郭を塗りつぶして(CV_FILLED)みたのが以下の結果だ。※
CV_RETR_CCOMP CV_RETR_TREE
抽出している輪郭データは変わらないが、階層構造(色分け)が違うのが分かるだろうか。
それにしても上手く処理出来た時のcvFindContoursの輪郭抽出は素晴らしい。素材の殆どの文字と矩形が正しく認識されているのが解るだろう。
※これはいわゆる"ラベリング"処理に近いと思われる。