더북(TheBook)

세 점의 이동 관계로부터 어파인 변환 행렬을 구하고, 이를 이용하여 실제 영상을 어파인 변환하는 예제 코드를 코드 8-1에 나타냈습니다. 코드 8-1의 affine_transform() 함수는 tekapo.bmp 호수 영상을 평행사변형 형태로 변환합니다. 입력 영상에서 세 점은 좌측 상단, 우측 상단, 우측 하단의 모서리 점을 선택하였고, 이 점들이 이동할 결과 영상에서의 위치는 임의로 지정했습니다. affine_transform() 함수가 정의된 소스 파일과 사용된 영상 파일은 내려받은 예제 파일 중 ch08/affine 프로젝트에서 확인할 수 있습니다.

코드 8-1 영상의 어파인 변환 예제 [ch08/affine]

01    void affine_transform()
02    {
03        Mat src = imread("tekapo.bmp");
04     
05        if (src.empty()) {
06            cerr << "Image load failed!" << endl;
07            return;
08        }
09     
10        Point2f srcPts[3], dstPts[3];
11        srcPts[0] = Point2f(0, 0);
12        srcPts[1] = Point2f(src.cols - 1, 0);
13        srcPts[2] = Point2f(src.cols - 1, src.rows - 1);
14        dstPts[0] = Point2f(50, 50);
15        dstPts[1] = Point2f(src.cols - 100, 100);
16        dstPts[2] = Point2f(src.cols - 50, src.rows - 50);
17     
18        Mat M = getAffineTransform(srcPts, dstPts);
19     
20        Mat dst;
21        warpAffine(src, dst, M, Size());
22     
23        imshow("src", src);
24        imshow("dst", dst);
25     
26        waitKey();
27        destroyAllWindows();
28    }

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