Lớp CascadeClassifier của được sử dụng để tải tệp trình phân loại và phát hiện các đối tượng mong muốn trong hình ảnh.
DetMultiScale () của lớp này phát hiện nhiều đối tượng có kích thước khác nhau. Phương thức này chấp nhận -
-
Một đối tượng của lớp Mat giữ hình ảnh đầu vào.
-
Một đối tượng của lớp MatOfRect để lưu trữ các khuôn mặt được phát hiện.
Để lấy số lượng khuôn mặt trong hình ảnh -
-
Tải tệp lbpcascade_frontalface.xml bằng lớp CascadeClassifier.
-
Gọi phương thức DetMultiScale ().
-
Chuyển đổi đối tượng MatOfRect thành một mảng.
-
Chiều dài của mảng là số lượng khuôn mặt trong hình ảnh.
Ví dụ
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class FaceDetection { public static void main (String[] args) { //Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); //Reading the Image from the file String file ="D:\\Images\\faces.jpg"; Mat src = Imgcodecs.imread(file); //Instantiating the CascadeClassifier String xmlFile = "lbpcascade_frontalface.xml"; CascadeClassifier classifier = new CascadeClassifier(xmlFile); //Detecting the face in the snap MatOfRect faceDetections = new MatOfRect(); classifier.detectMultiScale(src, faceDetections); System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); //Drawing boxes for (Rect rect : faceDetections.toArray()) { Imgproc.rectangle( src, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 0, 255), 3 ); } //Writing the image Imgcodecs.imwrite("D:\\Images\\face_Detection.jpg", src); System.out.println("Image Processed"); } }
Đầu vào
Đầu ra
No of faces detected: 3