Computer Vision/opencv(python)

[27] 5.기하학적 변환 1)영상의 이동 변환과 전단 변환

jwjwvison 2021. 3. 20. 00:47
  • 영상의 기하학적 변환(geometric transformation) 이란?
    • 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업
    • image registration, removal of geometric distortion

 

  • 이동 변환 (Translation transformation)
    • 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환
    • x축과 y축 방향으로의 이동 변위를 지정

  • 영상의 어파인 변환 함수
cv2.warpAffine(src,M,dsize,dst=None,flags=None,borderMode=None,borderValue=None) -> dst

 • src: 입력 영상
 • M: 2x3 어파인 변환 행렬 . 실수형
 • dsize : 결과 영상 크기 . (w, h) 튜플 . (0,0) 이면 src 와 같은 크기로 설정
 • dst: 출력 영상
 • flags: 보간법 . 기본값은 cv2.INTER_LINEAR.
 • borderMode: 가장자리 픽셀 확장 방식 . 기본값은 cv2.BORDER_CONSTANT.
 • borderValue: cv2.BORDER_CONSTANT 일 때 사용할 상수 값 . 기본값은 0.

 

  • 영상의 이동 변환 예제
import sys
import numpy as np
import cv2


src = cv2.imread('tekapo.bmp')

if src is None:
    print('Image load failed!')
    sys.exit()

aff=np.array([[1,0,200],[0,1,100]],dtype=np.float32)
dst=cv2.warpAffine(src,aff,(0,0))

cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows()


 

  • 전단 변환 (Shear transformation)
    • 층 밀림 변환, x축 y축 방향에 대해 따로 정의

 

  • 영상의 전단 변환 예제
import sys
import numpy as np
import cv2


src = cv2.imread('tekapo.bmp')

if src is None:
    print('Image load failed!')
    sys.exit()
aff=np.array([[1,0.5,0],[0,1,0]],dtype=np.float32)
h,w=src.shape[:2]

dst=cv2.warpAffine(src,aff,(w+int(h*0.5),h))
cv2.imshow('dst',dst)
cv2.waitKey()