2013年1月3日木曜日

OpenCVのFloodfillを試してみた。

Mastering OpenCV with Practical Computer Vision Projectの第5章のナンバープレート認識の処理の一部でcv::Floodfillが使用されている。この関数の使い方がいまひとつわからなかったので、APIの説明を読んでみた。

floodFillは、閾値の決め方と、結果の表示方法にバリエーションがある。
閾値の決め方は、flagを使用し、FLOODFILL_FIXED_RANGEをセットすると、指定した画素と比較対象の画素との差分を判別( fix mode)し、そうでなければ比較対処の近傍の画素と比較対象の画素との差分を判別(floating mode)する

結果に関しては、対象画素を指定の色で塗り替えるモードと、FLOODFILL_MASK_ONLYのflagをセットすることでmask画像を作成するモードがある。

FLOODFILL_MASK_ONLYは、第2の形態とあわせて使用する。

mask画像は、single-channel 8-bitであり、オリジナル画像のサイズより縦横2画素大きくする必要がある。


APIの説明では、詳しい使い方は、サンプルを見ろと書いてある。そこで、OpenCVのsampleコードにffilldemo.cppが含まれているので試してみた。

OpenCVの環境が整ったVS10で、新規プロジェクトを作成し、インクルードの宣言と、ライブラリのパスを頭に行い、後はデモプログラムをそのまま貼り付ける。

一箇所だけ、デフォルトで使用する画像のファイルfriut.jpgのパスがないので、保存されているフォルダーの絶対パスに書き換える。

ビルド後、実行し、マウスで画面内の任意の点をマウスでクリックすると、選択した点の画素に近い画素がランダムな色で塗りつぶされる。

 
選択できるモード
 
 
バナナの一部を指定

maskの使い方がいまひとつわからないので、いろいろ試してみる必要がある。

0 件のコメント:

コメントを投稿