Computer Vision/opencv(python)

[31] 5) 어파인 변환과 투시 변환

jwjwvison 2021. 3. 21. 12:48
  • 어파인 변환 vs 투시 변환

 

  • 어파인 변환 행렬 구하기
cv2.getAffineTransform(src,dst) -> retval

 • src : 3 개의 원본 좌표점 . numpy.ndarray . shape=(3,2)

         ex) np.array([[x1,y1],[x2,y2],[x3,y3]],np.float32)

 • dst 3: 개의 결과 좌표점 . numpy.ndarray . shape=(3,2)

 

  • 투시 변환 행렬 구하기
cv2.getPerspectiveTransform(src,dst,solveMethod=None) -> retval

 • src : 4 개의 원본 좌표점 . numpy.ndarray . shape=(4,2)

         ex)np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]],np.float32)

 • dst: 4 개의 결과 좌표점 . numpy.ndarray . shape=(4,2)

  • 영상의 어파인 변환 함수
cv2.warpAffine(src,N,dsuze,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.

 

  • 영상의 투시 변환 함수
cv2.warpPerspective(src,M,dsize,dst=None,flag=None,borderMode=None,bordervalue=None) -> dst

 • src: 입력 영상
 • M: 3x3 투시 변환 행렬 . 실수형
 • 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('name.jpg')
src=cv2.resize(src,(720,480))

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

w, h = 720, 400
srcQuad=np.array([[193,291],[479,320],[501,235],[229,213]],np.float32)  #몀함 위치좌표
dstQuad=np.array([[0,h-1],[w-1,h-1],[w-1,0],[0,0]],np.float32)          #출력사진 좌표

pers=cv2.getPerspectiveTransform(srcQuad,dstQuad)    #3x3 형태의 투시변환 행렬을 리턴해준다
dst=cv2.warpPerspective(src,pers,(w,h))              

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

'Computer Vision > opencv(python)' 카테고리의 다른 글

[33] 7) 문서 스캐너 구현  (0) 2021.03.21
[32] 6) 리매핑  (0) 2021.03.21
[30] 4) 영상의 회전  (0) 2021.03.21
[29] 3) 이미지 피라미드  (0) 2021.03.21
[28] 2) 영상의 확대와 축소  (0) 2021.03.20