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
Winda Agusthia Netto 10 नवम्बर 2018, 15:47

1 उत्तर

सबसे बढ़िया उत्तर

अपने कोड में, आपने मूल छवि की एक क्रॉप की गई छवि लौटा दी है, इसलिए यदि आप मूल छवि चाहते हैं, तो वृत्त बनाएं और इसे 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);

    }
0
Bahramdun Adil 10 नवम्बर 2018, 14:40