코드 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로 지정하여 키포인트 위치, 크기, 방향 정보를 함께 나타내도록 설정하였습니다.