- 어파인 변환 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 |