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)

인기 글

태그

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

최근 글

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

끄적끄적 개발일지

[OpenCV with Python] 영상 기하학적 변환 : 이동 변환 - cv2.warpAffine
OpenCV

[OpenCV with Python] 영상 기하학적 변환 : 이동 변환 - cv2.warpAffine

2022. 2. 1. 23:50

영상의 기하학적 변환(geometric transformation)이란?

  • 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업
  • Image registration, removal of geometric distortion, etc.

 

❓ 기하학적 변환이 필요한 이유

  1.  입력 영상 크기가 제한되어 있어 영상 크기를 축소해야 하는 경우
  2.  객체가 영상의 정중앙에 있어야 하는 경우
  3.  회전이 되어 있는 영상을 똑바로 보정

 이 외에도 여러가지 상황에서 영상의 기하학적 변환이 필요하다.

 

 

1. 영상의 이동 변환 - Translation transformation

 

 이동 변환은 shift라는 용어도 많이 쓴다.

 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환이다.

 x, y 방향으로 어느 정도 이동했는지에 대한 변위를 지정해줘야 한다.

 

원점에서 x축 이동은 a, y축 이동은 b로 표시한다.

덧셈 행렬로 구성되어 있는데, 곱셈 행렬 형태로 변환하여 하나의 수식으로 표현할 수 있다.

 

 

 어파인 변환 행렬(동차적 표계 개념)을 적용하면 이동 변환을 하나의 행렬로 표현할 수 있다.

 

이동 변환을 표현하는 어파인 변환 행렬을 np.array로 만들고 cv2.warpAffine 함수로 넘겨주면 이동 변환 할 수 있다.

 

 

✔︎  cv2.warpAffine 함수

dst = cv2.warpAffine(src, M, dsize, dst=None, flags=None,
                     borderMode=None, borderValue=None)
  • src: 입력 영상
  • M: 2x3 어파인 변환 행렬. 실수형.
  • 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('tekapo.bmp')

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

aff = np.array([[1, 0, 200],
                [0, 1, 100]], dtype=np.float32)

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

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

 

⬇︎

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 영상 기하학적 변환 : 영상의 확대와 축소 - 크기 변환 cv2.resize  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 전단 변환 - cv2.warpAffine  (0) 2022.02.02
[OpenCV with Python] Filtering : Noise 제거 - 양방향 필터 Bilateral Filter  (0) 2022.02.01
[OpenCV with Python] Filtering : Noise 제거 - Median Filter  (0) 2022.02.01
[OpenCV with Python] Filtering : 영상에 샤프닝 적용 - Unsharp Mask  (0) 2022.02.01
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바