//
// 引数:
// convexHullImage : ConvexHull画像用IplImage
// handpoint : 手領域内の点の座標配列
// hull : ConvexHullの頂点のhandpointにおけるindex番号
// hullcount : ConvexHullの頂点の数
//
// 戻り値:
// ConvexHull内の面積
//
int calcConvexHullArea(IplImage * convexHullImage, CvPoint * handpoint,
int *hull, int hullcount)
{
// ConvexHullの頂点からなる行列を生成
CvPoint *hullpoint = (CvPoint *) malloc(sizeof(CvPoint) * hullcount);
CvMat hMatrix = cvMat(1, hullcount, CV_32SC2, hullpoint);
for (int i = 0; i < hullcount; i++) {
hullpoint[i] = handpoint[hull[i]];
}
// ConvexHull内の点の数を数える
int hullarea = 0;
for (int x = 0; x < convexHullImage->width; x++) {
for (int y = 0; y < convexHullImage->height; y++) {
if (cvPointPolygonTest(&hMatrix, cvPoint2D32f(x, y), 0) > 0) {
hullarea++;
if (count == 1)
cvCircle(frameImage, cvPoint(x, y), 1,
cvScalar(0, 0, 0), -1);
}
}
}
count = 0;
free(hullpoint);
return hullarea;
}
最終更新:2010年01月29日 14:44