現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::輪郭線の抽出と描画方法

輪郭線の抽出と描画方法


輪郭線の抽出と描画の流れは、以下のようになる。
  1. 画像を2値化
  2. 輪郭線の抽出
  3. 描画

[1].画像を2値化


画像をグレイスケールにしてから、cvThreshold関数を用いる。

[例]

IplImage *imgA = cvLoadImage( "test.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(!imgA)
{
cerr << "can't load image\n";
return EXIT_FAILURE;
}


cvThreshold(imgA,imgA,127,255,CV_THRESH_BINARY); //2値化


実際には、カラー画像で読み込んで、
そこからグレイスケール画像を作った方が後々便利。


[2].輪郭線の抽出


輪郭線の抽出は、cvFindContours関数で行う。

この時必要なのが、
  • メモリストレージ → 抽出された輪郭を保存する領域
  • シーケンス → データが格納されるバッファみたいなもの
である。

[例]

CvMemStorage *storage = cvCreateMemStorage (0); //メモリストレージ
CvSeq *contours = 0; //シーケンス

int x = cvFindContours (imgA, storage, &contours, sizeof (CvContour), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE); 
 //CV_RETR_TREE→全ての輪郭を拾う

cout <<"輪郭が"<< x << "個 見つかりました\n";


メモリストレージは動的なもの。必要量を超えるとそれに合わせて再確保をする。(C++のvectorみたいなもの)

また、cvFindContours関数は、輪郭の個数を返している。


[3].描画


輪郭線の描画には、cvDrawContours関数を使う。

[例]

cvDrawContours (imgA, contours, CV_RGB (255, 0, 0), CV_RGB (0, 255, 0), 1, 2, CV_AA, cvPoint (0, 0));


第5引数を「1」にすることで、輪郭線を描画する。
詳細はリファレンス参照。




サンプルコードOpenCV::輪郭線

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人のみ編集できます