K 개발자
뒤틀기 본문
어핀 변환
어핀 변환(affine transform)은 사실 이동, 확대/축소, 회전을 포함하는 변환으로 직선, 길이의 비율, 평행성을 보존하는 변환을 말한다. (어핀 변환 링크)
어핀 변환의 이런 성질 때문에 변환 전과 후의 3개의 점을 짝 지어 매핑할 수 있다면 변환행렬을 거꾸로 계산할 수 있는데, OpenCV는 cv2.getAffineTransform() 함수로 이 기능을 제공한다.
- matrix = cv2.getAffineTransform(pts1, pts2)
- pts1 : 변환 전 영상의 좌표 3개, 3 × 2 NumPy 배열(float32)
- pts2 : 변환 후 영상의 좌표 3개, pts1과 동일
- matrix : 변환행렬 반환, 2 × 3 행렬
원근 변환
OpenCV는 변환 전과 후를 짝짓는 4개의 매핑 좌표만 지정해 주면 원근 변환에 필요한 3 × 3 변환행렬을 계산해 주는 cv2.getPerspectiveTransform() 함수를 제공한다.
- mtrx = cv2.getPerspectiveTransform(pts1, pts2)
- pts1 : 변환 이전 영상의 좌표 4개, 4 × 2 NumPy 배열(float32)
- pts2 : 변환 이전 영상의 좌표 4개, pts1과 동일
- mtrx : 변환행렬 반환, 3 × 3 행렬
또한, OpenCV는 원근 변환을 수행하는 함수로 지금까지 사용해 온 cv2.warpAffine() 함수가 아닌 별도의 함수 cv2.warpPerspective() 함수를 제공한다.
- dst = cv2.warpPerspective(src, mtrx, dsize [, dst, flags, borderMode, borderValue])
- src : 원본 영상, NumPy 배열
- mtrx : 2×3 변환행렬, NumPy 배열, dtype = float32
- dsize : 결과 이미지 크기, tuple(width, height)
- flags : 보간법 알고리즘 선택 플래그
- cv2.INTER_LINEAR : 기본 값, 인접한 4개 픽셀 값에 거리 가중치 사용
- cv2.INTER_NEAREST : 가장 가까운 픽셀 값 사용
- cv2.INTER_AREA : 픽셀 영역 관계를 이용한 재샘플링
- cv2.INTER_CUBIC : 인접한 16개 픽셀 값에 거리 가중치 사용
- cv2.INTER_LANCZOS4 : 인접한 8개 픽셀을 이용한 란초의 알고리즘$^1$
- borderMode : 외곽 영역 보정 플래그
- cv2.BORDER_CONSTANT : 고정 색상 값(999|12345|999)
- cv2.BORDER_REPLICATE : 가장 자리 복제(111|12345|555)
- cv2.BORDER_WARP : 반복(345|12345|123)
- cv2.BORDER_REFLECT : 반사(321|12345|543)
- borderValue : cv2.BORDER_CONSTANT의 경우 사용할 색상 값(기본 값 = 0)
- dst : 결과 이미지, NumPy 배열
Comments