더북(TheBook)

HOGDescriptor::detectMultiScale() 함수는 입력 영상 img에서 다양한 크기의 객체 사각형 영역을 검출하고, 그 결과를 std::vector<Rect> 타입의 인자 foundLocations에 저장합니다. 두 개의 HOGDescriptor::detectMultiScale() 함수 중에서 첫 번째 함수는 검출된 사각형 영역에 대한 신뢰도를 함께 반환합니다.

HOGDescriptor 클래스를 이용하여 동영상에서 보행자를 검출하는 예제 코드를 코드 13-5에 나타냈습니다. 코드 13-5에 나타난 보행자 검출 예제 프로그램은 HOGDescriptor 클래스가 제공하는 보행자 검출 HOG 정보를 이용하여 동영상 매 프레임에서 보행자를 검출하고, 그 결과를 화면에 표시합니다. 코드 13-5의 예제 코드는 내려받은 예제 파일 중 ch13/hog 프로젝트 폴더에서 확인할 수 있습니다.

코드 13-5 보행자 검출 예제 프로그램 [ch13/hog]

01    #include "opencv2/opencv.hpp"
02    #include <iostream>
03     
04    using namespace cv;
05    using namespace std;
06     
07    int main()
08    {
09        VideoCapture cap("vtest.avi");
10     
11        if (!cap.isOpened()) {
12            cerr << "Video open failed!" << endl;
13            return -1;
14        }
15     
16        HOGDescriptor hog;
17        hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
18     
19        Mat frame;
20        while (true) {
21            cap >> frame;
22            if (frame.empty())
23                break;
24     
25            vector<Rect> detected;
26            hog.detectMultiScale(frame, detected);
27     
28            for (Rect r : detected) {
29                Scalar c = Scalar(rand() % 256, rand() % 256, rand() % 256);
30                rectangle(frame, r, c, 3);
31            }
32     
33            imshow("frame", frame);
34     
35            if (waitKey(10) = = 27)
36                break;
37        }
38     
39        return 0;
40    }

 

9행 현재 폴더에서 vtest.avi 파일을 불러옵니다. 프로그램 시작 전에 vtest.avi 파일을 미리 현재 폴더로 복사해야 합니다.

16행 HOGDescriptor 객체 hog를 선언합니다.

17행 보행자 검출을 위한 용도로 훈련된 SVM 분류기 계수를 등록합니다.

25~26행 동영상 매 프레임마다 보행자 검출을 수행합니다. 검출된 사각형 정보는 detected 변수에 저장됩니다.

28~31행 검출된 사각형 정보를 이용하여 임의의 색상으로 3픽셀 두께의 사각형을 그립니다.

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