더북(TheBook)

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 영상에 보라색으로 그립니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.