OpenCV는 다양한 이미지 처리 함수를 제공합니다. 이미지 확대, 회전, 자르기와 같은 기본적인 함수들도 포함되어 있습니다. 이번 글에서는 OpenCV를 사용하여 이미지를 확대, 회전, 자르는 방법에 대해 알아보겠습니다.
이미지 확대
이미지를 확대하기 위해서는 resize() 함수를 사용합니다. 이 함수는 이미지를 지정한 크기로 확대하거나 축소할 수 있습니다.
import cv2
# 이미지 읽어오기
img = cv2.imread('image.jpg')
# 이미지 확대하기
img_resized = cv2.resize(img, None, fx=2.0, fy=2.0, interpolation=cv2.INTER_CUBIC)
# 이미지 출력하기
cv2.imshow('image', img_resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 resize() 함수는 fx와 fy 매개변수를 사용하여 이미지를 가로 방향과 세로 방향으로 각각 얼마나 확대할지를 지정합니다. 이 함수는 이미지를 확대할 때 발생하는 픽셀 값을 보완하기 위해 보간법(interpolation)을 사용합니다.
이미지 회전
이미지를 회전하기 위해서는 getRotationMatrix2D() 함수와 warpAffine() 함수를 사용합니다. getRotationMatrix2D() 함수는 회전 변환 행렬을 생성하고, warpAffine() 함수는 이 행렬을 사용하여 이미지를 회전합니다.
import cv2
import numpy as np
# 이미지 읽어오기
img = cv2.imread('image.jpg')
# 회전 변환 행렬 생성하기
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 1)
# 이미지 회전하기
img_rotated = cv2.warpAffine(img, M, (cols, rows))
# 이미지 출력하기
cv2.imshow('image', img_rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 getRotationMatrix2D() 함수는 회전 변환 행렬을 생성합니다. 이 함수는 회전 중심점(x, y), 회전 각도, 확대/축소 비율을 인자로 받습니다. warpAffine() 함수는 생성한 회전 변환 행렬을 사용하여 이미지를 회전합니다.
이미지 자르기
이미지를 자르기 위해서는 NumPy 배열의 인덱싱을 사용합니다. 인덱싱을 사용하여 이미지의 부분 영역을 선택하고, 해당 영역을 새로운 이미지로 저장합니다.
import cv2
# 이미지 읽어오기
img = cv2.imread('image.jpg')
# 이미지 자르기
img_cropped = img[100:300, 200:400]
# 이미지 출력하기
cv2.imshow('image', img_cropped)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 img[100:300, 200:400]는 원본 이미지에서 (100, 200)부터 (300, 400)까지의 부분 영역을 선택합니다. 이 부분 영역은 새로운 이미지로 저장됩니다.
결론
이상으로 OpenCV를 사용하여 이미지를 확대, 회전, 자르는 방법에 대해 알아보았습니다. 이러한 기본적인 이미지 처리 함수들은 이미지 분석 및 처리에서 매우 유용하게 사용됩니다.
'파이썬 > OpenCV' 카테고리의 다른 글
파이썬 모듈 : OpenCV 윤곽선 검출 (0) | 2023.03.27 |
---|---|
파이썬 모듈 : OpenCV 가장자리 검출 (0) | 2023.03.26 |
파이썬 모듈 : OpenCV 읽기, 쓰기, 필터링 (0) | 2023.03.24 |
이미지의 크기 변환 cv2.resize() (0) | 2022.11.17 |
CV2로 IPCAMERA 영상을 동영상으로 저장 해보자 (0) | 2022.11.16 |