8 Stimmen

Wie man kreisförmig die Augenpupille in OpenCV erkennt

Ich arbeite an OpenCV in Android und möchte die Augenpupillenfarbe über den Hue-Kanal ändern. Das habe ich bereits erreicht, aber das Problem ist, dass die erkannte Region rechteckig ist, ich aber möchte, dass diese Region kreisförmig ist, da die Augenpupille eine kreisförmige Region ist. Bitte helfen Sie mir, wie ich das erreichen kann.

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

3voto

Ophir Yoktan Punkte 7691

Einige mögliche Lösungen:

  • Die einfachste, aber möglicherweise nicht sehr robuste Lösung besteht darin, den eingeschriebenen Kreis (den Kreis, der durch das Rechteck begrenzt ist) zu berechnen und seine Farbe zu ändern - wenn Ihre Pupillenerkennung sehr genau ist, könnte diese Lösung gut funktionieren.

  • Eine robustere Lösung wäre die Erkennung des Bereichs der Pupille basierend auf Farbe oder Gradient (Kantenerkennung)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X