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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆうじ

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

#1

投稿記事 by ゆうじ » 11年前

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

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

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


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

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

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

ゆうじ

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

#2

投稿記事 by ゆうじ » 11年前

すみません。 輪郭 と 輪郭の間の間違いでした。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#3

投稿記事 by usao » 11年前

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

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

ゆうじ

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

#4

投稿記事 by ゆうじ » 11年前

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

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

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

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

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

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#5

投稿記事 by usao » 11年前

「cvFindContours」でググって,最初に出てくるページです
http://imagingsolution.blog107.fc2.com/ ... y-202.html

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

閉鎖

“C言語何でも質問掲示板” へ戻る