void Track(void)

void Track(void)
{
    //      肌色を抽出する
    extractSkinColor(frameImage, hsvImage, skinImage);
 
    //      欠損領域を補間する
    interpolate(skinImage, temp);
 
    sabun(skinImage);
 
    //      ラベリングを行う
    Label *labeling = createLabeling();
    exec(labeling, skinImage, label, true, IGNORE_SIZE);
 
    if (getNumOfResultRegions(labeling) > 0) {
	//      IGNORE_SIZEよりも大きな領域があった場合
 
	int handarea;		//      手領域の面積
	int hullcount;		//      ConvexHullの頂点の数
	CvPoint *handpoint;	//      手領域内の点の座標配列
	int *hull;		//      ConvexHullの頂点のhandpointにおけるindex番号
	CvMat pointMatrix;	//      手領域用行列
	CvMat hullMatrix;	//      ConvexHull用行列
 
	//      最大領域(手領域)の抽出を行う
	handarea = pickupMaxArea(skinImage, label, convexHullImage);
 
	//      ConvexHullを生成する
	createConvexHull(skinImage, handarea, &handpoint, &hull,
			 &pointMatrix, &hullMatrix);
 
	hullcount = hullMatrix.cols;
 
	//      ConvexHullを描画する
	drawConvexHull(convexHullImage, handpoint, hull, hullcount);
 
	//      ConvexHull内の面積を求める
	hullarea =
	    calcConvexHullArea(convexHullImage, handpoint, hull,
			       hullcount);
	printf("%d\n",hullarea);
 
	//      ジャンケンの判定を行う
if(hullarea <= 150000 && hullarea >= 60000)
	decide(handarea, hullarea);
else
	printf("n\n");
 
	//      メモリを解放する
	free(handpoint);
	free(hull);
    } else {
	//      画像を初期化する
	cvSetZero(convexHullImage);
    }
 
    releaseLabeling(labeling);
 
    if (skinImage->origin == 0) {
	// 左上が原点の場合
	cvFlip(skinImage, skinImage, 0);
    }
    if (convexHullImage->origin == 0) {
	// 左上が原点の場合
	cvFlip(convexHullImage, convexHullImage, 0);
    }
}
最終更新:2010年01月29日 14:20
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。