더북(TheBook)

FAST() 함수의 입력 영상으로는 CV_8UC1 타입의 그레이스케일 영상만 사용할 수 있습니다. FAST() 함수의 두 번째 인자 keypointsKeyPoint 클래스 객체의 벡터로 지정합니다. KeyPoint 클래스는 Point 타입의 멤버 변수 pt를 가지고 있어서, 여기에 코너 점 좌표가 저장됩니다.3 즉, FAST() 함수에 의해 결정된 코너 점 중에서 i번째 코너의 x, y 좌표는 keypoints[i].pt.xkeypoints[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절에서 자세히 설명합니다.

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