XML 파일을 정상적으로 불러왔다면 이제 CascadeClassifier::detectMultiScale() 멤버 함수를 이용하여 객체 검출을 실행할 수 있습니다. CascadeClassifier::detectMultiScale() 함수 원형은 다음과 같습니다.
void CascadeClassifier::detectMultiScale(InputArray image, vector<Rect>& objects, double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), Size maxSize = Size()); |
|
• image |
입력 영상. CV_8U 깊이의 행렬 |
• objects |
(출력) 검출된 객체의 사각형 좌표 정보 |
• scaleFactor |
검색 윈도우 확대 비율. 1보다 커야 합니다. |
• minNeighbors |
검출 영역으로 선택하기 위한 최소 검출 횟수 |
• flags |
현재 사용되지 않습니다. |
• minSize |
검출할 객체의 최소 크기 |
• maxSize |
검출할 객체의 최대 크기 |
CascadeClassifier::detectMultiScale() 함수는 입력 영상 image에서 다양한 크기의 객체 사각형 영역을 검출합니다. 만약 입력 영상 image가 3채널 컬러 영상이면 함수 내부에서 그레이스케일 형식으로 변환하여 객체를 검출합니다. 각각의 사각형 영역 정보는 Rect 클래스를 이용하여 표현하고, vector<Rect> 타입의 인자 objects에 검출된 모든 사각형 정보가 저장됩니다. scaleFactor 인자는 검색 윈도우의 확대 비율을 지정합니다. CascadeClassifier::detectMultiScale() 함수는 다양한 크기의 얼굴을 검출하기 위하여 처음에는 작은 크기의 검색 윈도우를 이용하여 객체를 검출하고, 이후 scaleFactor 값의 비율로 검색 윈도우 크기를 확대시키면서 여러 번 객체를 검출합니다. minNeighbors 인자에는 검출할 객체 영역에서 얼마나 많은 사각형이 중복되어 검출되어야 최종적으로 객체 영역으로 설정할지를 지정합니다. minNeighbors 값을 기본값인 3으로 설정하면 검출된 사각형이 최소 세 개 이상 중첩되어야 최종적으로 객체 영역으로 판단합니다.