ページ 11

OPENCVで輪郭の輪郭の間を塗りつぶしたいです。

Posted: 2014年2月25日(火) 22:40
by ゆうじ
OPENCVで輪郭の輪郭の間を塗りつぶしたいです。

以下のURLを参考にし、輪郭を抽出することには成功しました。

http://opencv.jp/sample/segmentation_an ... ml#contour


上記URLの 実行結果例 にあるlevel-1 でいうと、
赤と緑の輪郭の間を塗りつぶしたいのですが、どうすればよいでしょうか。

また、lebel1のように輪郭の中に輪郭が検出できない場合は、輪郭内を全て塗りつぶしたいです。

どなたかご教授いただけないでしょうか。
よろしくお願いいたします。

Re: OPENCVで輪郭の輪郭の間を塗りつぶしたいです。

Posted: 2014年2月26日(水) 02:03
by ゆうじ
すみません。 輪郭 と 輪郭の間の間違いでした。

Re: OPENCVで輪郭の輪郭の間を塗りつぶしたいです。

Posted: 2014年2月26日(水) 09:24
by usao
速度とかをあまり気にしなくて良いのであれば,
一旦「塗りつぶす箇所」を示すマスクを作り,それを使って
cvSet( 塗りつぶし対象画像, 塗りつぶす色, 塗りつぶす箇所マスク );
のような形でできそうに思います.

cvFindContours()の結果データに関するまともな情報って見たことないけど,
引数の指定の仕方次第で,階層構造的な情報(輪郭Aの中に輪郭Bがあって…みたいな情報)が
取れるんじゃなかったかな? その情報を使えば
 一番外側の輪郭Aの内部領域を白で塗りつぶす→Aの中に存在する輪郭Bの内部領域を黒で塗りつぶす
…みたいな方法でマスクを描画することができるんじゃないでしょうか.

Re: OPENCVで輪郭の輪郭の間を塗りつぶしたいです。

Posted: 2014年3月01日(土) 03:03
by ゆうじ
申し訳ございません。
輪郭と輪郭の間の「塗りつぶす箇所」を示すマスクを作成する方法を模索したのですが、輪郭と輪郭の間を抽出する方法が見つからなかったため、うまくいきませんでした。
代わりに 方法を模索した際にみつけたものを使い、領域の色づけには成功しましたが、階層別に色分けする方法が見つかりませんでした。

以下のURLの方法を参考にし、、ラベリングしました。
http://tech-sketch.jp/2012/11/labeling.html

こちらは井村先生のラベリングクラスを使っていますが、この関数では階層別で認識することはできないようです。

具体的には、以下URLの右上の画像のようなかんじにしたいです。
http://help.jp.infragistics.com/Help/Do ... Level.html

どうすれば階層別に色分けすることが出来るでしょうか。
よろしくお願いいたします。

Re: OPENCVで輪郭の輪郭の間を塗りつぶしたいです。

Posted: 2014年3月01日(土) 11:52
by usao
「cvFindContours」でググって,最初に出てくるページです
http://imagingsolution.blog107.fc2.com/ ... y-202.html

ここにcvFindContoursが返す情報のデータ構造が解説されています.
階層構造と輪郭のデータの取得方法がわかれば,あとは望む形に塗ればよいでしょう.