OpenCV: Rectts для глаз смещены от лица ROI - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь обнаружить только глаза внутри лица. Глаза фактически обнаруживаются, только когда распознано лицо, но соответствующий прямоугольник не на месте:

enter image description here

Зеленый прямоугольник правильно ловит лицо. Но прямоугольники глаза голубого цвета смещены в верхний левый угол. Кажется, они исходят из координат 0,0, а не из верхнего левого угла прямоугольника грани.

    // detect faces
    this.faceCascade.detectMultiScale(grayFrame, faces, 1.1, 2, 0 | Objdetect.CASCADE_SCALE_IMAGE,  new Size(this.absoluteFaceSize, this.absoluteFaceSize), new Size());


    Rect[] facesArray = faces.toArray();
    MatOfRect eyes = new MatOfRect();
    this.eyeCascade.load("resources/haarcascades/haarcascade_eye.xml");

    for (int i = 0; i < facesArray.length; i++) {
        Rect currentFace = facesArray[i];
        Imgproc.rectangle(frame, currentFace.tl(), currentFace.br(), new Scalar(0, 255, 0), 3);
        Imgproc.putText(frame, "face", currentFace.tl(), 2, 2, new Scalar(0, 255, 0));

        Mat faceROI = grayFrame.submat(currentFace);

        this.eyeCascade.detectMultiScale(faceROI, eyes, 1.1,2,0 | Objdetect.CASCADE_SCALE_IMAGE, new Size(this.absoluteFaceSize/5, this.absoluteFaceSize/5), new Size());
        Rect[] eyesArray = eyes.toArray();
        for (Rect eye : eyesArray) {
            Point tl = new Point(currentFace.x+eye.tl().x, currentFace.y+eye.tl().y);
            Point br = new Point(currentFace.x + eye.br().x, currentFace.y + eye.br().y);
            Imgproc.rectangle(faceROI, tl, br, new Scalar(0, 0, 255), 3);
            Imgproc.putText(faceROI, "Eye", tl, 2, 2, new Scalar(0, 0, 255));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...