1. 영상의 회전변환
- 영상을 특정 각도만큼 회전시키는 변환
- OpenCV에서는 반시계 방향을 기본으로 사용
OpenCV 회전변환행렬 구하는 메서드
- 90, 270, 180도 등 특수각 한서 작동
Mat getRotationMatrix2D(Point2f center, double angle, double scale);
- center: 회전중심좌표
- angle: 회전각도(반시계), 음수는 시계방향
- scale: 회전 후 확대 비율
- 반환값: 2x3 double(CV_64F) 행렬
OpenCV 회전변환 메서드
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize,
int flags = INTER_LINEAR, int borderMode = BORDER_CONSTANT,
const Scalar& borderValue = Scalar());
- src: 입력영상
- dst: 출력영상
- M: 2x3 어파인 변환행렬. CV_32F 또는 CV_64F
- dsize: 결과 영상 크기
- flags: 보간법 선택
- borderMode: 가장자리 픽셀 처리방식
- borderValue: BOREDER_CONSTANT 모드 사용 시 픽셀 값
실습코드
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
void on_rotate(int pos, void* data);
int main()
{
Mat src = imread("lenna.bmp");
if (src.empty()) {
cerr << "Image load failed!" << endl;
return -1;
}
imshow("src", src);
namedWindow("dst");
createTrackbar("angle", "dst", 0, 360, on_rotate, (void*)&src);
on_rotate(0, (void*)&src);
waitKey();
}
void on_rotate(int pos, void* data)
{
Mat src = *(Mat*)data;
float degree = (float)pos;
Point2f pt(src.cols / 2.f, src.rows / 2.f);
Mat rot = getRotationMatrix2D(pt, degree, 1.0);
Mat dst;
warpAffine(src, dst, rot, Size());
imshow("dst", dst);
}
2. 기하학적 변환의 조합과 동차 좌표계
크기변환과 회전변환 조합
이동변환, 크기변환, 회전변환 조합
동차 좌표계(homogenous coordinates)
3. 대칭변환
void flip(InputArray src, OutputArray dst, int flipCode);
- src: 입력영상
- dst: 출력영상
- flipcode: 대칭방향 지정