Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách phát hiện khuôn mặt trong hình ảnh bằng Java OpenCV


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 Mat chứ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:

  1. Tải file lbpcascade_frontalface.xml bằng lớp CascadeClassifier.
  2. Gọi phương thức detectMultiScale().
  3. Chuyển đổi đối tượng MatOfRect sang mảng.
  4. Độ 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

Cách phát hiện khuôn mặt trong hình ảnh bằng Java OpenCV

Kết quả

Số khuôn mặt phát hiện: 3