* 이미지 와핑(Warping)
- 기하학적 변형(Geometric Transformation)의 한 종류
- (x, y) 좌표의 픽셀을 (x', y') 좌표로 대응시키는 작업
* OpenCV의 이미지 와핑(Warping)
- OpenCV에서도 와핑 함수가 구현이 돼있다. 좌표를 구하는 방식은 본인 몫
- 구현 순서
1. (x, y)에 해당하는 4점의 좌표를 지정 <- 코너 검출기 함께 사용하면 편할 것 같다
2. (x', y')에 해당하는 4점의 좌표를 지정
3. getPerspectiveTransform()함수를 사용하여 Transform Matrix를 구함
4. warpPerspective()함수를 이용하여 실제 Warping
void cvWarpPerspective(const CvArr *src, CvArr *dst, const CvMat *map_matrix, int flags = 1+8, CvScalar fillval = cvScalarAll(0))
- 첫번째 변수 src는 원본 이미지, 두번째 변수 dst는 타겟 이미지, 세번째 변수 CvMat는 미리 계산해둔 변환행렬
- 두번째 변수는 미리 초기화 해두어야 한다.
- 나머지 변수는 변환 기법과 변환시 빈 공간을 채울 색을 지정하는 것으로
- 변환기법은 CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS 채울 색상은 cvScalarAll(0)의 기본값을 사용하면 된다.
-> 변환행렬을 구하는 함수는 cvGetPerspectiveTransform()
- 4개의 점으로 이루어진 사각형 내의 이미지를 새로운 4개의 점으로 이루어진 사각형으로 변환할 수 있도록
행렬(Matrix) 생성
CvMat* cvGetPerspectiveTransform(const CvPoint2D32f *src, const CvPoint2D32f *dst, CvMat *map_matrix)
- CvPoint2D32f 형으로 두 개의 배열을 선언하고, 각각에 꼭짓점을 L.T, R.T, L.B, R.B 순으로 넣는다.
이미지를 불러와서 OpenCV로 구현을 해보았다.
코너 검출 함께 해서 할 수 있었는데 일단 확인을 하기 위해 쉽게 했음..
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Mat img = imread("2.jpg");
// Warping 전의 이미지 상의 좌표
vector<Point2f> corners(4);
corners[0] = Point2f(125, 292);
corners[1] = Point2f(848, 193);
corners[2] = Point2f(143, 780);
corners[3] = Point2f(890, 810);
Size warpSize(800, 800);
Mat warpImg(warpSize, img.type());
// Warping 후의 좌표
vector<Point2f> warpCorners(4);
warpCorners[0] = Point2f(0, 0);
warpCorners[1] = Point2f(warpImg.cols, 0);
warpCorners[2] = Point2f(0, warpImg.rows);
warpCorners[3] = Point2f(warpImg.cols, warpImg.rows);
// Transformation Matrix 구하기
Mat trans = getPerspectiveTransform(corners, warpCorners);
// Warping
warpPerspective(img, warpImg, trans, warpSize);
imshow("warpImg", warpImg);
for (int i = 0; i < corners.size(); i++)
circle(img, corners[i], 3, Scalar(255, 0, 0), 3);
imshow("Image", img);
waitKey(0);
return 0;
}
>
출처]
http://m.blog.naver.com/pckbj123/100205803400
http://sigi1404.tistory.com/entry/%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B3%B4%EC%A0%95-Warping
'Computer VIsion > 영상처리' 카테고리의 다른 글
[OpenCV] SIFT 예제 (2) | 2017.04.19 |
---|---|
[영상처리] 이미지 특징점(Feature) 검출 방법 (0) | 2017.04.11 |
[OpenCV] 얼굴 검출 (Face Detection) (0) | 2017.03.30 |
[OpenCV] 피부색 검출(손, 얼굴) 코드 (0) | 2017.03.24 |
[OpenCV] 차영상 구현 코드 (3) | 2017.03.24 |