Suivi / comptage des doigts à l'aide de la coque convexe OpenCV et des fonctions Défaut de convexité

Je travaille sur une base de la main/doigt de code de suivi à l'aide d'OpenCV et de la ConvexHull et ConvexityDefects méthode.

Fondamentalement, je suis en mesure de créer un contour de la main. J'ai maintenant besoin de pouvoir compter le nombre de doigts. Je sais que le début et la fin des points de l'enveloppe Convexe sont des bouts des doigts, mais je suis pas sûr de la manière de compter et aussi la manière de les mettre en valeur par le dessin de cercles ou de quelque chose.

Je veux mon code pour effectuer quelque chose comme cette.

Ceci est un exemple de la partie de mon code pour l'instant:

cvFindContours( hsv_mask, storage, &contours, sizeof(CvContour), CV_RETR_LIST,         CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );

CvSeq* contours2 = NULL;

CvRect rect = cvBoundingRect( contours2, 0 );

cvRectangle( bitImage, cvPoint(rect.x, rect.y + rect.height), cvPoint(rect.x + rect.width, rect.y), CV_RGB(200, 0, 200), 1, 8, 0 );

CvSeq* hull = cvConvexHull2( contours2, 0, CV_CLOCKWISE, 0 );

CvSeq* defect = cvConvexityDefects( contours2, hull, dftStorage );

CvBox2D box = cvMinAreaRect2( contours2, minStorage );

cvDrawContours( bg, contours2,  CV_RGB( 0, 200, 0), CV_RGB( 0, 100, 0), 1, 1, 8, cvPoint(0,0));

J'ai joué avec lui et je peux maintenant dessiner le bout du doigt, des points à l'aide de ce code

for(;defect;defect = defect->h_next) 
{ 
        int nomdef = defect->total;
        if(nomdef == 0)  
    continue; 
    defectArray = (CvConvexityDefect*)malloc(sizeof(CvConvexityDefect)*nomdef);     
    cvCvtSeqToArray (defect, defectArray, CV_WHOLE_SEQ);
    for(i=0; i<nomdef;>
    { 
        cvCircle( bg, *(defectArray[i].end), 5, CV_RGB(255,0,0), -1, 8,0);  
        cvCircle( bg, *(defectArray[i].start), 5, CV_RGB(0,0,255), -1, 8,0); 
        cvCircle( bg, *(defectArray[i].depth_point), 5, CV_RGB(0,255,255), -1, 8,0);        
    }
    j++;
    free(defectArray);
    }

Cependant j'ai toujours beaucoup de faux positifs. Aussi si quelqu'un pourrait suggérer des méthodes pour compter les doigts ce serait merveilleux.

source d'informationauteur user1061512