더북(TheBook)

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번째 키포인트의 기술자를 나타냅니다.

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