[Python 데이터 분석과 이미지 처리] OpenCV 이미지 변형

뽕칠이·2023년 12월 22일
0

OpenCV 이미지 변형

cv2.resize(image, dsize, fx, fy, interpolation): 이미지의 크기 조절

  • dsize: Manual size
  • fx, fy: 가로, 세로 비율
  • interpolation: 보간법(사이즈가 변할 때 픽셀 사이의 값을 조절하는 방법),
    INTER_CUBIC: 사이즈를 크게 할 때 사용, INTER_AREA: 사이즈를 줄일 때 사용
import cv2
import matplotlib.pyplot as plt
image = cv2.imread('cat.jpg')

# 이미지 크기 확장
expand = cv2.resize(image, None, fx=2.0, fy=2.0, interpolation=cv2.INTER_CUBIC)
plt.imshow(cv2.cvtColor(expand, cv2.COLOR_BGR2RGB))
plt.show()

# 이미지 크기 축소
shrink = cv2.resize(image, None, fx=0.8, fy=0.8, interpolation=cv2.INTER_AREA)
plt.imshow(cv2.cvtColor(shrink, cv2.COLOR_BGR2RGB))
plt.show()

cv2.warpAffine(image, M, dsize): 이미지의 위치 변경

  • M: 변환 행렬
    [[M1, M2, M3],
    [M4, M5, M6]]
    이미지의 모든 좌표(a,b)는 이동한다.
    (M1a + M2b + M3, M4a + M5b + M6)
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('cat.jpg')

# 이미지의 행과 열 정보 저장
height, width = image.shape[:2]

# 이미지의 모든 좌표를 (50, 10)만큼 이동
M = np.float32([[1, 0, 50], [0, 1, 10]])
dst = cv2.warpAffine(image, M, (width, height))

plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.show()

출력 결과

cv2.getRotationMatrix2D(center, angle, scale): 이미지 회전을 위한 변환 행렬 생성

  • center: 회전 중심
  • angle: 회전 각도
  • scale: Scale Factor
import cv2
import matplotlib.pyplot as plt
import numpy as np
image = cv2.imread('cat.jpg')

# 이미지의 행과 열 정보 저장
height, width = image.shape[:2]

# (가로의 절반, 세로의 절반)을 중심으로 90도 회전
M = cv2.getRotationMatrix2D((width/2, height/2), 90, 0.5)
dst = cv2.warpAffine(image, M, (width, height))

plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.show()

출력 결과

0개의 댓글