더북(TheBook)

코드 14-4의 detect_keypoints() 함수 실행 결과를 그림 14-9에 나타냈습니다. 그림 14-9에서 src는 입력으로 사용한 box_in_scene.png 파일이고, dst는 해당 영상에 ORB 알고리즘으로 검출된 특징점을 표시한 결과 영상입니다. dst 영상에는 각 특징점 위치를 중심으로 하는 다수의 원이 그려져 있으며, 원 크기는 특징점 검출 시 고려한 이웃 영역 크기를 나타냅니다. 그리고 각 원의 중심에서 뻗어 나간 직선은 특징점 근방에서 추출된 주된 방향을 표시합니다.

▲ 그림 14-9 키포인트 검출 예제 실행 화면

 

detect_keypoints() 함수를 실행하면 콘솔 창에는 다음 문자열이 출력됩니다.

keypoints.size(): 500
desc.size(): [32 x 500]

이는 ORB 알고리즘으로 box_in_scene.png 영상에서 500개의 특징점이 검출되었고, 특징점을 표현하는 기술자 행렬이 500행, 32열로 구성되었음을 나타냅니다. ORB 알고리즘에 의해 구해지는 기술자 행렬은 CV_8UC1 타입이기 때문에 각 기술자의 크기는 32바이트입니다.

참고로 코드 14-4에서 특징점을 검출하고, 검출한 특징점에서 기술자를 계산하는 12~16행 소스 코드는 특징점 검출과 기술자 계산을 한꺼번에 수행하는 Feature2D::detectAndCompute() 함수를 이용하여 다음과 같이 바꿔 쓸 수 있습니다.

vector<KeyPoint> keypoints;
Mat desc;
feature->detectAndCompute(src, Mat(), keypoints, desc);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.