OpenCV利用時での輪郭について

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

OpenCV利用時での輪郭について

#1

投稿記事 by たなかたろう » 3年前

輪郭を検出した際、同じ階層の輪郭は->h.next で選択できるとの内容がhttp://imagingsolution.blog107.fc2.com/ ... y-202.htmlにあるのですが実際やってみると予想外の結果となります。
自分的にはくっついていない輪郭が1つ1つ->h.nextで選べると思っていたのですが、->h.nextを1つ増やすと1つ以外の輪郭がすべて表示されて困っています。
おそらく、線形リストのある地点より後のものがすべて表示されていると思うのですがそのリストの内1つの要素(=輪郭)を抜き出す方法がわからないです。ご教授お願いします。

コード:

#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
	IplImage *im = cvLoadImage("pic.png");	//画像のよみこみ
	IplImage *edge;    //エッジ化画像
	IplImage *contourim;	//輪郭画像
	IplImage *result;
	
	
	edge = cvCreateImage(cvGetSize(im), IPL_DEPTH_8U, 1);
	contourim = cvCreateImage(cvGetSize(im), IPL_DEPTH_8U, 1);
	result = cvCreateImage(cvGetSize(im), IPL_DEPTH_8U,3);
	cvSet(result, CV_RGB(255,255, 255));
   
        //ここではエッジ化処理等は省略します
	
	//輪郭検出
	CvMemStorage *storage = cvCreateMemStorage(0);
	CvSeq *find_contour = NULL;
	cvFindContours(second, storage, &find_contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
	
	cvDrawContours(result, find_contour, CV_RGB(255, 0, 0), CV_RGB(255, 0, 0), 1, 2, 8, cvPoint(0, 0));
	cvShowImage("result", result);
	

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