AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • LEVEL2
  • OpenCV
  • 이코테
  • 연습문제
  • level1
  • 파이썬
  • 프로그래머스
  • Python
  • 백준
  • 알고리즘

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV with Python]  영상 기하학적 변환 : 영상의 회전 - cv2.getRotationMatrix2D
OpenCV

[OpenCV with Python] 영상 기하학적 변환 : 영상의 회전 - cv2.getRotationMatrix2D

2022. 2. 2. 15:07

회전 변환  Rotation transformation

영상을 특정 각도만큼 회전시키는 변환이다. (반시계 방향으로 회전)

 

반시계 방향으로 세타만큼 회전시킬 때 sin, cos 함수로 표현할 수 있다.

affine 행렬을 생성하고 affwrap 함수를 이용하여 간단히 회전 할 수 있다.

 

회전 변환을 위한 Affine 행렬을 생성하는 방법은 두 가지가 있다.

 

 

1. 영상의 좌측 상단 기준 회전

np.array로 Affine 행렬을 생성하고, 생성한 Affine 행렬을 warpAffine 함수의 입력 인자로 입력해준다.

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

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

rad = 20 * math.pi / 180 # 각도 설정

# np.array로 Affine 행렬 생성
aff = np.array([[math.cos(rad), math.sin(rad), 0],
                [-math.sin(rad), math.cos(rad), 0]], dtype=np.float32)

dst = cv2.warpAffine(src, aff, (0, 0))

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

cv2.destroyAllWindows()

 

⬇︎

 

좌측 상단을 기준으로 영상이 회전됐음을 볼 수 있다.

 

 

2. 영상의 중앙 기준 회전 - cv.2getRotationMatrix2D

OpenCV에서 제공하는 cv.2getRotationMatrix2D 함수를 이용하면 영상의 중앙을 기준점으로 회전할 수 있다.

 

retval = cv2.getRotationMatrix2D(center, angle, scale)
  • center: 회전 중심 좌표. (x, y) 튜플.
  • angle: (반시계 방향) 회전 각도(degree). 음수는 시계 방향.
  • scale: 추가적인 확대 비율
  • retval: 2x3 어파인 변환 행렬. 실수형.

회전 중심 좌표는 영상의 가로, 세로 1/2 값을 넣어주면 영상의 중앙 좌표로 설정할 수 있다.

 

import sys
import numpy as np
import cv2


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

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

cp = (src.shape[1] / 2, src.shape[0] / 2)
rot = cv2.getRotationMatrix2D(cp, 20, 0.5)

dst = cv2.warpAffine(src, rot, (0, 0))

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

cv2.destroyAllWindows()

 

 

스케일 값을 0.5로 해줬기 때문에 크기가 작아졌다.

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 영상 기하학적 변환 : 투시 변환  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 어파인 변환  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 이미지 피라미드  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 영상의 대칭 변환 - cv2.flip  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 영상의 확대와 축소 - 크기 변환 cv2.resize  (0) 2022.02.02
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바