2014年1月18日土曜日

Android-OpenCV 輪郭抽出

Android OpenCV 輪郭抽出


今回は取り込んだ画像の輪郭を検出する方法です。

輪郭(エッジ)の表示は

Imgproc.Canny(Mat image, Mat edges, double threshold1, double threshold2)

  • image – 8ビット,シングルチャンネルの入力画像.
  • edges – 出力されるエッジのマップ. image と同じサイズ,同じ型です.
  • threshold1 – ヒステリシスが存在する処理の,1番目の閾値.
  • threshold2 – ヒステリシスが存在する処理の,2番目の閾値.
  • apertureSizeSobel() オペレータのアパーチャサイズ.
  • L2gradient – 画像勾配の強度を求めるために,より精度の高い L_2 ノルム =\sqrt{(dI/dx)^2 + (dI/dy)^2} を利用するか, L_1 ノルム =|dI/dx|+|dI/dy| で十分( L2gradient=false )かを指定します.

を用いることでできます。(OpenCV リファレンス参照)

srcにはシングルチャンネルである必要があるので

上の関数に入れる前に入力画像を

Imgproc.cvtColor(Mat src, Mat dst, int code)

codeにImgproc.COLOR_RGB2GRAYを指定することによってRGBからグレースケールのシングルチャンネルの画像に変換されます。

/*-----------------------------------------------------------------------

Mat src;
Mat dst;
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);

Mat image = dst;
Mat edges;
Imgproc.Canny( image, edges, 80, 100);

-----------------------------------------------------------------------*/

これで輪郭が抽出された画像が出力されます。

0 件のコメント:

コメントを投稿