Feature2D::detect() 함수는 image 영상으로부터 다수의 특징점을 검출하여 vector<KeyPoint> 타입의 변수 keypoints에 저장합니다. 만약 입력 영상의 일부 영역에서만 특징점을 검출하려면 mask 인자를 설정하여 사용할 수 있습니다.
예를 들어 레나 영상에 대해 ORB 특징점을 검출하려면 다음과 같은 형태로 코드를 작성할 수 있습니다.
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE); Ptr<Feature2D> feature = ORB::create(); vector<KeyPoint> keypoints; feature->detect(src, keypoints);
앞 예제 코드에서 feature 변수는 Ptr<Feature2D> 타입으로 선언되었지만 실제로는 ORB 클래스 객체를 가리키고 있습니다. 그러므로 feature->detect() 형태로 함수를 호출하면 실제로는 ORB 알고리즘 구현 클래스의 detect() 함수가 실행되고, 결과적으로 ORB 특징점이 keypoints에 저장됩니다.
이미 검출된 특징점에서 각 특징점 주변의 부분 영상을 표현하는 기술자를 추출하려면 Feature2D:: compute() 가상 멤버 함수를 사용합니다. Feature2D::compute() 함수 원형은 다음과 같습니다.
virtual void Feature2D::compute(InputArray image, std::vector<KeyPoint>& keypoints, OutputArray descriptors); |
|
• image |
입력 영상 |
• keypoints |
미리 검출해 둔 키포인트 정보 |
• descriptors |
계산된 기술자 행렬. i번째 행은 i번째 키포인트의 기술자를 나타냅니다. |