現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::輪郭線

関連 : OpenCV::輪郭線の抽出と描画方法

問題


以下の画像を読み込んで、輪郭線を検出し、それを描画せよ。

その他条件:
 輪郭の抽出モードは「CV_RETR_EXTERNAL」→最も外側の輪郭のみ抽出する。

答え


#include <iostream>
#include <cv.h>
#include <highgui.h>


int main( int argc, char **argv)
{

using namespace std;

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

/*** 輪郭抽出用 ***/
IplImage *gray = cvCreateImage(cvGetSize(imgA),IPL_DEPTH_8U,1);
cvCvtColor(imgA, gray, CV_BGR2GRAY);

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


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


int x = cvFindContours (gray, storage, &contours, sizeof (CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
cout <<"輪郭が"<< x << "個見つかりました\n";




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

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);


cvReleaseMemStorage (&storage);//メモリストレージの解放
cvReleaseImage( & gray);

cvWaitKey(0);


cvReleaseImage( & imgA);

cvDestroyWindow("window");

return 0;
}

メモ


流れは、
  1. カラー画像を読み込み、そのグレイスケール画像をつくる
  2. グレイスケール画像で画像処理する
  3. グレイスケールでの結果をカラー画像に描画する
×

この広告は60日間更新がないwikiに表示されております。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

管理人/副管理人のみ編集できます