CascadeClassifier 클래스를 이용하여 얼굴을 검출하는 예제 코드를 코드 13-3에 나타냈습니다. 코드 13-3에 나타난 detect_face() 함수는 OpenCV에서 제공하는 haarcascade_frontalface_default.xml 파일을 이용하여 kids.png 영상에서 얼굴을 검출하고, 검출된 얼굴 영역을 화면에 표시합니다. detect_face() 함수가 정의된 소스 코드 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch13/cascade 프로젝트 폴더에서 확인할 수 있습니다.
코드 13-3 얼굴 검출 예제 프로그램 [ch13/cascade]
01 void detect_face() 02 { 03 Mat src = imread("kids.png"); 04 05 if (src.empty()) { 06 cerr << "Image load failed!" << endl; 07 return; 08 } 09 10 CascadeClassifier classifier("haarcascade_frontalface_default.xml"); 11 12 if (classifier.empty()) { 13 cerr << "XML load failed!" << endl; 14 return; 15 } 16 17 vector<Rect> faces; 18 classifier.detectMultiScale(src, faces); 19 20 for (Rect rc : faces) { 21 rectangle(src, rc, Scalar(255, 0, 255), 2); 22 } 23 24 imshow("src", src); 25 26 waitKey(0); 27 destroyAllWindows(); 28 }
• 10행 CascadeClassifier 객체를 생성함과 동시에 haarcascade_frontalface_default.xml 파일을 불러옵니다.
• 12~15행 분류기를 정상적으로 불러왔는지를 확인합니다. 분류기를 정상적으로 불러오지 못했으면 에러 메시지를 출력하고 함수를 종료합니다.
• 17~18행 src 영상에서 얼굴을 검출하여 검출된 사각형 정보를 faces에 저장합니다.
• 20~22행 검출된 얼굴 영역 사각형을 src 영상에 보라색으로 그립니다.