FAST() 함수의 입력 영상으로는 CV_8UC1 타입의 그레이스케일 영상만 사용할 수 있습니다. FAST() 함수의 두 번째 인자 keypoints는 KeyPoint 클래스 객체의 벡터로 지정합니다. KeyPoint 클래스는 Point 타입의 멤버 변수 pt를 가지고 있어서, 여기에 코너 점 좌표가 저장됩니다.3 즉, FAST() 함수에 의해 결정된 코너 점 중에서 i번째 코너의 x, y 좌표는 keypoints[i].pt.x와 keypoints[i].pt.y 코드로 접근할 수 있습니다.
FAST() 함수를 이용하여 코너 점을 검출하는 예제 코드를 코드 14-2에 나타냈습니다. 코드 14-2의 corner_fast() 함수는 building.jpg 빌딩 영상에서 FAST 방법으로 코너 점을 찾아 빨간색 원으로 표시합니다. corner_fast() 함수가 정의된 소스 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch14/corners 프로젝트에서 확인할 수 있습니다.
코드 14-2 FAST 코너 검출 예제 [ch14/corners]
01 void corner_fast() 02 { 03 Mat src = imread("building.jpg", IMREAD_GRAYSCALE); 04 05 if (src.empty()) { 06 cerr << "Image load failed!" << endl; 07 return; 08 } 09 10 vector<KeyPoint> keypoints; 11 FAST(src, keypoints, 60, true); 12 13 Mat dst; 14 cvtColor(src, dst, COLOR_GRAY2BGR); 15 16 for (KeyPoint kp : keypoints) { 17 Point pt(cvRound(kp.pt.x), cvRound(kp.pt.y)); 18 circle(dst, pt, 5, Scalar(0, 0, 255), 2); 19 } 20 21 imshow("src", src); 22 imshow("dst", dst); 23 24 waitKey(0); 25 destroyAllWindows(); 26 }
• 3행 building.jpg 영상을 그레이스케일 형식으로 불러와 src에 저장합니다.
• 10~11행 src 영상에서 FAST 방법으로 코너 점을 검출합니다. 밝기 차이 임계값으로 60을 지정하였고, 비최대 억제를 수행하도록 설정하였습니다. 검출된 모든 코너 점 좌표는 keypoints 변수에 저장됩니다.
• 13~14행 src 영상을 3채널 컬러 영상으로 변환하여 dst에 저장합니다.
• 16~19행 검출된 모든 코너 점에 반지름이 5인 빨간색 원을 그립니다.
3 KeyPoint 클래스에 대해서는 14.2.2절에서 자세히 설명합니다.