2013-12-12 12 views
6

Ich arbeite auf opencv in android und ich möchte Auge Pupille Farbe durch Farbton Kanal ändern und ich erreiche dies bereits, aber das Problem ist, dass die Region, die ich entdeckt habe, ist in Rechteck, aber ich will dies Region kreisförmig wie Augenpupille ist kreisförmige Region. bitte hilf mir, wie ich das erreiche.wie Augenpupille zirkular in opencv zu erkennen ist

private Mat get_template(CascadeClassifier clasificator, Rect area,int size){ 
    Mat template = new Mat(); 
    Mat mROI = mGray.submat(area); 
    MatOfRect eyes = new MatOfRect(); 
    Point iris = new Point(); 
    Rect eye_template = new Rect(); 
    clasificator.detectMultiScale(mROI, eyes, 1.15, 2,Objdetect.CASCADE_FIND_BIGGEST_OBJECT|Objdetect.CASCADE_SCALE_IMAGE, new Size(30,30),new Size()); 


    Rect[] eyesArray = eyes.toArray(); 
    for (int i = 0; i < eyesArray.length; i++){ 
     Rect e = eyesArray[i]; 
     e.x = area.x + e.x; 
     e.y = area.y + e.y; 
     Rect eye_only_rectangle = new Rect((int)e.tl().x,(int)(e.tl().y + e.height*0.4),(int)e.width,(int)(e.height*0.6)); 
     mROI = mGray.submat(eye_only_rectangle); 
     Mat vyrez = mRgba.submat(eye_only_rectangle); 
     Core.MinMaxLocResult mmG = Core.minMaxLoc(mROI); 

     Core.circle(vyrez, mmG.minLoc,2, new Scalar(255, 255, 255, 255),2); 
     iris.x = mmG.minLoc.x + eye_only_rectangle.x; 
     iris.y = mmG.minLoc.y + eye_only_rectangle.y; 
     eye_template = new Rect((int)iris.x-size/2,(int)iris.y-size/2 ,size,size); 
     Core.rectangle(mRgba,eye_template.tl(),eye_template.br(),new Scalar(255, 0, 0, 255), 2); 
     template = (mGray.submat(eye_template)).clone(); 
     return template; 
    } 
    return template; 
    } 
+0

warum ru Schüler zu erfassen, ich glaube, Sie Augapfel – umerk44

+0

@ umerk44 sprechen über, wenn Sie haben Augen-Ball-Code, können Sie diesen Code freundlicherweise teilen. –

+0

wenn ich dir den Code gebe. Wo bist du dann? : P – umerk44

Antwort

3

Einige mögliche Lösungen:

  • die einfachste, obwohl es nicht sehr robust sein könnte, ist die Inkreises (der Kreis durch das Rechteck gebunden) zu berechnen, und ändern Sie es Farbe ist - wenn Ihre Schüler Erkennung ist sehr genau diese Lösung kann gut funktionieren.

  • eine robustere Lösung wäre, den Bereich der Pupille

    basierend auf Farbe oder Steigung (Flankenerkennung) zu erfassen
+0

vielen Dank. Ich verstehe, was Sie gesagt haben, aber können Sie bitte ein Codebeispiel über Kantenerkennung teilen, wie kann ich den Rand der Augenpupille erkennen? –

+0

Ich habe keinen relevanten Code zur Verfügung. aber open cv hat einige Algorithmen implementiert. –