void createConvexHull(IplImage * skinImage, int handarea,

//      ConvexHullを生成する
//
//      引数:
//              skinImage   : 肌色抽出画像用IplImage
//              handarea    : 手領域の面積(点の数)
//              handpoint   : 手領域内の点の座標配列へのポインタ
//              hull        : ConvexHullの頂点のhandpointにおけるindex番号へのポインタ
//              pointMatrix : 手領域用行列へのポインタ
//              hullMatrix  : ConvexHull用行列へのポインタ
//
void createConvexHull(IplImage * skinImage, int handarea,
		      CvPoint ** handpoint, int **hull,
		      CvMat * pointMatrix, CvMat * hullMatrix)
{
    int i = 0;
 
    //      ConvexHullを計算するために必要な行列を生成する
    *handpoint = (CvPoint *) malloc(sizeof(CvPoint) * handarea);
    *hull = (int *) malloc(sizeof(int) * handarea);
    *pointMatrix = cvMat(1, handarea, CV_32SC2, *handpoint);
    *hullMatrix = cvMat(1, handarea, CV_32SC1, *hull);
 
    for (int x = 0; x < skinImage->width; x++) {
	for (int y = 0; y < skinImage->height; y++) {
	    if (cvGetReal2D(skinImage, y, x) == 255) {
		(*handpoint)[i].x = x;
		(*handpoint)[i].y = y;
		i++;
	    }
	}
    }
 
    //      ConvexHullを生成する
    cvConvexHull2(pointMatrix, hullMatrix, CV_CLOCKWISE, 0);
}
最終更新:2010年01月29日 14:42
ツールボックス

下から選んでください:

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