// 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