Как установить размер обрезки в CascadeCalssifier с Java - PullRequest
0 голосов
/ 10 ноября 2018
public BufferedImage detectAndDisplay(BufferedImage img, CascadeClassifier faceCascade) {
    Mat frameGray = new Mat();
    BufferedImage imgout = null;

    Mat image = ImagePreProcessing.bufferedImageToMat(img);

    // -- Detect faces
    MatOfRect faces = new MatOfRect();
    faceCascade.detectMultiScale(image, faces);

    List<Rect> listOfFaces = faces.toList();
    for (Rect face : listOfFaces) {
        Point center = new Point(face.x + face.width / 2, face.y + face.height / 2);
        Imgproc.ellipse(image, center, new Size(face.width / 2, face.height / 2), 0, 0, 360,
                new Scalar(255, 0, 255), 3);

        Mat faceROI = image.submat(face);
        imgout = ImagePreProcessing.Mat2BufferedImage(faceROI);
        System.out.println("OpenCV: " +center);

    }
    return imgout;
}

этот код у меня есть ... но я не знаю, где код для установки изображения обрезки. Я хочу, чтобы картинка была похожа на оригинальную версию с шаблоном круга .. НЕ для обрезки Можете дать мне предложение, пожалуйста:)

ввод: input

вывод: output

1 Ответ

0 голосов
/ 10 ноября 2018

В вашем коде вы вернули обрезанное изображение исходного изображения, поэтому, если вы хотите исходное изображение, нарисуйте круг, преобразуйте его в BufferedImage и верните.

for (Rect face : listOfFaces) {
        Point center = new Point(face.x + face.width / 2, face.y + face.height / 2);
        Imgproc.ellipse(image, center, new Size(face.width / 2, face.height / 2), 0, 0, 360,
                new Scalar(255, 0, 255), 3);

        // dot not crop!!!
        /*Mat faceROI = image.submat(face);
        imgout = ImagePreProcessing.Mat2BufferedImage(faceROI);*/

        System.out.println("OpenCV: " +center);
        imgout = ImagePreProcessing.Mat2BufferedImage(image);

    }
...