Finger tracking / zählen mit OpenCV und Konvexität konvexe Hülle Defekt Funktionen

Ich habe auf einer grundlegenden hand - /finger-tracking-code mithilfe von OpenCV und die ConvexHull und ConvexityDefects Methode.

Grundsätzlich bin ich in der Lage, erstellen Sie eine Kontur der hand. Ich brauche jetzt in der Lage sein, um die Anzahl der Finger. Ich weiß, dass die start-und die end-Punkte der Konvexen Hülle sind die Fingerspitzen, aber ich bin nicht sicher, wie Sie zu zählen und auch, wie Sie zu markieren, indem Sie das zeichnen von Kreisen auf Sie oder so etwas.

Möchte ich mein code etwas wie diese.

Dies ist ein Beispiel-Teil von meinem code bisher:

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));

Ich habe gespielt, um mit ihm und ich kann jetzt ziehen die Fingerspitze Punkte mit diesem 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);
    }

Aber ich bin noch immer eine Menge von Fehlalarmen. Auch wenn jemand könnte schlagen vor, Methoden zu zählen nun die Finger, das wäre wunderbar.

Sie konnten zeigen einige Bilder, die aus der code ausgeführt wird Sie haben?
Außerdem haben Sie come across diese Frage, welche Prozesse eine konvexe Hülle um die Rückgabe Mängel als ein Vektor, der die Punkte? Ich vermute, Sie dann verarbeiten müssen, diese Punkte zu extrahieren, die Fingerspitzen aus dem anderen Ende des Rumpfes. Dies wird davon abhängen, wie das Bild tatsächlich angezeigt wird, vielleicht ist der Rumpf erstreckt sich zum Rand des Bildes und man konnte ignorieren, Punkte in der Nähe der Kante?

InformationsquelleAutor user1061512 | 2011-11-23

Schreibe einen Kommentar