Lớp CascadeClassifier được dùng để tải file phân loại và phát hiện các đối tượng mong muốn trong hình ảnh.
Phương thức detectMultiScale() của lớp này phát hiện nhiều đối tượng với nhiều kích thước khác nhau. Phương thức này chấp nhận:
Một đối tượng lớp
Matchứa hình ảnh đầu vào.Một đối tượng 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 file
lbpcascade_frontalface.xmlbằng lớpCascadeClassifier. - Gọi phương thức
detectMultiScale(). - Chuyển đổi đối tượng
MatOfRectsang mảng. - Độ dài của mảng chính là số 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) {
// Tải thư viện lõi OpenCV
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Đọc hình ảnh từ file
String file = "D:\\Images\\faces.jpg";
Mat src = Imgcodecs.imread(file);
// Khởi tạo CascadeClassifier
String xmlFile = "lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
// Phát hiện khuôn mặt
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
System.out.println(String.format("Đã phát hiện %s khuôn mặt", faceDetections.toArray().length));
// Vẽ khung bao quanh
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
);
}
// Ghi hình ảnh
Imgcodecs.imwrite("D:\\Images\\face_Detection.jpg", src);
System.out.println("Ảnh đã được xử lý");
}
}
Ảnh đầu vào

Kết quả
Số khuôn mặt phát hiện: 3