Я пытаюсь обнаружить только глаза внутри лица. Глаза фактически обнаруживаются, только когда распознано лицо, но соответствующий прямоугольник не на месте:
![enter image description here](https://i.stack.imgur.com/Ulk8E.jpg)
Зеленый прямоугольник правильно ловит лицо. Но прямоугольники глаза голубого цвета смещены в верхний левый угол. Кажется, они исходят из координат 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));
}
}