기하학적 변환 2 (투시 변환)

Codren·2021년 5월 21일
0

기하학적 변환

목록 보기
2/2

Section 1. 투시 변환

1. 어파인 변환 vs 투시 변환

  • 어파인 변환 - 변환 결과가 평행사변형 형태
  • 투시 변환 (Perspective Transformation) - 어파인 변환 보다 자유도가 높은 변환


  • 어파인 변환 - 영상 파일의 끝 점 3개의 이전 위치와 변환 후의 위치를 알면 이동 관계를 알 수 있음
                         (평행 사변형에서 점 3개를 알면 나머지 점의 위치 또한 알 수 있기 때문에 점 3개)
  • 투시 변환 - 영상 파일의 끝 점 4개의 이전위치와 변환 후의 위치를 알면 이동 관계를 알 수 있음
                      (평행 사변형이 아닌 좀 더 자유로운 사각형이므로 점 4개 모두 알아야함)




2. 투시 변환 행렬 구하는 함수

  • getPerspectiveTransform 함수
  • 변환 전의 점 4개의 좌표와 변환 후의 점 4개의 좌표를 이용하여 어떻게 변환되었는지에 대한 정보를 투시 변환 행렬로 반환하는 함수

  • src - 4개의 원본 좌표점 (numpy.ndarray. shape=(4,2))
  • dst - 4개의 결과 좌표점 (numpy.ndarray. shape=(4,2))
  • retval - 3x3 투시 변환 행렬




3. 투시 변환 함수

  • warpPerspective 함수 - warpAffine 함수와 M 인자 빼고 모두 동일




4. 투시 변환 코드 및 결과

src = cv2.resize(src,(1000,800))	# 포스터 영상 파일 1000x800 크기로 변경
w, h = 500, 700				# 출력될 영상 파일 500x700 크기로 변경

# 입력 영상 파일에서 변환 될 객체의 4개의 점 좌표를 srcQuad에 저장
srcQuad = np.array([[412, 750], [94, 582], [473, 340], [772, 482]], np.float32) 

# 출력될 영상 파일의 끝 좌표 점을 dstQuad에 저장
dstQuad = np.array([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]], np.float32)

pers = cv2.getPerspectiveTransform(srcQuad, dstQuad)	# srcQuad의 좌표점이 dstQuad의 좌표점으로 투시변환하기 위한 투시 변환 행렬을 구함
dst = cv2.warpPerspective(src, pers, (w, h))		# pers 투시 변환 행렬을 인자로 지정 

0개의 댓글