int calcConvexHullArea(IplImage * convexHullImage, CvPoint * handpoint,

//
//      引数:
//              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
ツールボックス

下から選んでください:

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