어파인 변환과 투시 변환

매일 공부(ML)·2021년 11월 30일
0

OPEN CV

목록 보기
27/45

어파인 변환

  • 정의: 영상의 평행이동, 확대 및 축소, 회전 등의 조합으로 만들수 있는 기하학적 변환으로 셀의 위치를 일정 규칙에 따라 옮김으로한다.

  • 시각화

  • 행렬

  • 좌표

  • 행렬 구하기
cv2.getAffineTransform(src, dst) -> retval
  • src: 3개의 원본 좌표점. numpy.ndarrary, shape(3,2)

    • ex:) np.array([[x1,y1], [x2,y2], [x3,y3]], np.float32)
  • dst: 3개의 결과 좌표점으로 numpy.ndarray.shape=(3,2)

  • retval: 2 * 3 투시 변환 행렬

  • 변환 함수
cv2.warpAffine(src, M, dsize, dst=None, flags=None, 
borderMode=None, borderValue=None) -> dst
  • src: 입력 영상

  • M: 2 * 3 어파인 변환 행렬로 실수형이다

  • dsize: 결과 영상 크기이고 (w,h)튜플로 (0,0)이먄 src와 같은 크기로 설정

  • dst: 출력 영상

  • flags: 보간법. 기본값은 cv2.INTER_LINEAR

  • borderMode: 가장자리 픽셀 확장 방식으로 기본 값은 cv2.BORDER_CONSTANT

  • borderValue: cv2.BORDER_CONSTANT일 때 사용할 상수 값으로 기본 값은 0이다.

투시 변환

  • 정의: 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)

  • retval: 3 * 3 투시 변환 행렬

  • 변환 함수
cv2.warpPerspective(src, M, dsize, dst=None, flags=None, 
borderMode=None, borderValue=None) -> dst
  • src: 입력 영상

  • M: 3 * 3 투시 변환 행렬로 실수형이다.

  • dsize: 결과영상 크기로 (w,h)튜플이다. (0,0)이면 src와 같은 크기로 설정

  • dst: 출력 영상

  • flags: 보간법. 기본값은 cv2.INTER_LINEAR

  • borderMode: 가장자리 픽셀 확장 방식으로 기본값은 cv2.BORDER_CONSTANT

  • borderValue: cv2.BORDER_CONSTANT일 때 사용할 상수 값으로 기본 값은 0이다.

예제

src = cv2.imread('namecard.jpg')
w, h = 720, 400
srcQuad = np.array([[325, 307], [760, 369], [718, 611], [231, 515]],
					np.float32)

dstQuad = np.array([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]], np.float32)

pers = cv2.getPerspectiveTransform(srcQuad, dstQuad)

dst = cv2.warpPerspective(src, pers, (w, h))

profile
성장을 도울 아카이빙 블로그

0개의 댓글