OpenCV의 CascadeClassifier 클래스는 학습된 분류기 파일을 로드하여 이미지 속 원하는 객체를 검출하는 데 사용됩니다. 이 클래스의 detectMultiScale() 메서드는 다양한 크기의 여러 객체를 한 번에 탐지할 수 있으며, 주요 파라미터는 다음과 같습니다.
- Mat 객체: 입력 이미지를 담고 있는 Mat 클래스의 인스턴스
- MatOfRect 객체: 검출된 얼굴 영역을 저장할 MatOfRect 클래스의 인스턴스
이미지 속 얼굴 개수 구하는 절차
- CascadeClassifier 클래스를 사용해
lbpcascade_frontalface.xml분류기 파일을 로드합니다. detectMultiScale()메서드를 호출하여 얼굴을 검출합니다.- MatOfRect 객체를 배열로 변환합니다.
- 배열의 길이가 곧 이미지 내 얼굴의 개수입니다.
예제 코드
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) {
// OpenCV 핵심 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 파일에서 이미지 읽기
String file = "D:\\Images\\faces.jpg";
Mat src = Imgcodecs.imread(file);
// CascadeClassifier 인스턴스 생성
String xmlFile = "lbpcascade_frontalface.xml";
CascadeClassifier classifier = new CascadeClassifier(xmlFile);
// 이미지에서 얼굴 검출
MatOfRect faceDetections = new MatOfRect();
classifier.detectMultiScale(src, faceDetections);
System.out.println(String.format("Detected %s faces",
faceDetections.toArray().length));
// 검출된 얼굴에 사각형 그리기
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
);
}
// 결과 이미지 저장
Imgcodecs.imwrite("D:\\Images\\face_Detection.jpg", src);
System.out.println("Image Processed");
}
}입력 이미지

실행 결과
No of faces detected: 3
코드 설명
위 예제는 다음과 같은 순서로 동작합니다. 먼저 System.loadLibrary()로 OpenCV 네이티브 라이브러리를 로드하고, Imgcodecs.imread()로 대상 이미지를 불러옵니다. 이후 LBP(Local Binary Patterns) 기반 정면 얼굴 분류기를 초기화한 뒤 detectMultiScale()을 호출하면, 검출된 각 얼굴의 위치와 크기 정보가 MatOfRect 객체에 저장됩니다.
마지막으로 Imgproc.rectangle() 메서드를 사용해 검출된 얼굴 영역에 빨간색 사각형(Scalar(0, 0, 255), 두께 3)을 그리고, Imgcodecs.imwrite()로 결과 이미지를 파일로 저장합니다. LBP 분류기는 Haar 캐스케이드보다 연산 속도가 빠르다는 장점이 있어 실시간 처리에도 유용합니다.