더북(TheBook)

코드 14-4 키포인트 검출 예제 [ch14/keypoints]

01    void detect_keypoints()
02    {
03        Mat src = imread("box_in_scene.png", IMREAD_GRAYSCALE);
04     
05        if (src.empty()) {
06            cerr << "Image load failed!" << endl;
07            return;
08        }
09     
10        Ptr<Feature2D> feature = ORB::create();
11     
12        vector<KeyPoint> keypoints;
13        feature->detect(src, keypoints);
14     
15        Mat desc;
16        feature->compute(src, keypoints, desc);
17     
18        cout << "keypoints.size(): " << keypoints.size() << endl;
19        cout << "desc.size(): " << desc.size() << endl;
20     
21        Mat dst;
22        drawKeypoints(src, keypoints, dst, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
23     
24        imshow("src", src);
25        imshow("dst", dst);
26     
27        waitKey();
28        destroyAllWindows();
29    }

 

10행 ORB 클래스 객체를 생성하여 feature 스마트 포인터에 저장합니다.

12~13행 ORB 키포인트를 검출하여 keypoints 벡터에 저장합니다.

15~16행 ORB 키포인트 기술자를 계산하여 desc 행렬에 저장합니다.

18~19행 keypoints에 저장된 키포인트 개수와 desc 행렬 크기를 콘솔 창에 출력합니다.

21~22행 입력 영상 src에 키포인트를 그린 결과를 dst에 저장합니다. 키포인트 그리는 방식을 DrawMatchesFlags:: DRAW_RICH_KEYPOINTS로 지정하여 키포인트 위치, 크기, 방향 정보를 함께 나타내도록 설정하였습니다.

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