반응형
OpenCV 이미지 크기 조절, 회전 및 이동 (cv2.resize(), cv2.rotate(), cv2.warpAffine())
1. 개요
컴퓨터 비전에서 이미지 전처리는 매우 중요한 단계입니다. OpenCV에서는 다양한 변환 기능을 제공하며, 이번 포스팅에서는 이미지의 크기 조절, 회전, 이동 방법을 다룹니다. 이러한 변환은 이미지 분석, 객체 검출, 패턴 인식과 같은 다양한 컴퓨터 비전 작업에서 필수적으로 사용됩니다.
이번 포스팅에서는 cv2.resize(), cv2.rotate(), cv2.warpAffine() 함수를 활용하여 이미지의 크기를 조절하고, 회전하며, 이동하는 방법을 살펴보겠습니다.
2. 이미지 크기 조절 (cv2.resize())
2.1 cv2.resize() 개요
cv2.resize() 함수는 이미지를 원하는 크기로 조절할 때 사용됩니다. 크기를 줄이거나 확대하는 작업이 가능하며, 보간법을 사용하여 이미지 품질을 유지할 수 있습니다.
2.2 cv2.resize() 문법
cv2.resize(src, dsize[, fx[, fy[, interpolation]]])
src: 원본 이미지dsize: 변경할 이미지의 크기 (가로, 세로) 튜플fx,fy: 가로 및 세로 크기 비율 (생략 가능)interpolation: 보간법 (이미지 확대/축소 시 픽셀 값을 보정하는 방법)
2.3 보간법 (Interpolation) 종류
| 보간법 | 설명 |
|---|---|
cv2.INTER_NEAREST |
최근접 이웃 보간법 (빠르지만 품질 낮음) |
cv2.INTER_LINEAR |
선형 보간법 (기본값) |
cv2.INTER_CUBIC |
3차 보간법 (품질 높지만 속도 느림) |
cv2.INTER_LANCZOS4 |
Lanczos 보간법 (고품질) |
2.4 cv2.resize() 사용 예제
import cv2
# 이미지 불러오기
image = cv2.imread('sample.jpg')
# 50% 크기로 축소
resized_half = cv2.resize(image, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)
# 200x200 크기로 조절
resized_exact = cv2.resize(image, (200, 200), interpolation=cv2.INTER_CUBIC)
cv2.imshow('Resized Half', resized_half)
cv2.imshow('Resized Exact', resized_exact)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 이미지 회전 (cv2.rotate())
3.1 cv2.rotate() 개요
cv2.rotate() 함수는 이미지의 방향을 변환할 때 사용됩니다. 기본적으로 90도 단위로 회전하는 기능을 제공합니다.
3.2 cv2.rotate() 문법
cv2.rotate(src, rotateCode)
src: 원본 이미지rotateCode: 회전 방향 지정
3.3 회전 방향 지정 코드
| 회전 코드 | 설명 |
|---|---|
cv2.ROTATE_90_CLOCKWISE |
시계 방향 90도 회전 |
cv2.ROTATE_90_COUNTERCLOCKWISE |
반시계 방향 90도 회전 |
cv2.ROTATE_180 |
180도 회전 |
3.4 cv2.rotate() 사용 예제
import cv2
# 이미지 불러오기
image = cv2.imread('sample.jpg')
# 시계 방향 90도 회전
rotated_90 = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
# 180도 회전
rotated_180 = cv2.rotate(image, cv2.ROTATE_180)
cv2.imshow('Rotated 90', rotated_90)
cv2.imshow('Rotated 180', rotated_180)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 이미지 이동 (cv2.warpAffine())
4.1 cv2.warpAffine() 개요
이미지를 특정 위치로 이동시키려면 cv2.warpAffine() 함수를 사용해야 합니다. 이 함수는 변환 행렬을 이용하여 이미지의 픽셀을 이동시킵니다.
4.2 이동 변환 행렬 생성
이동 변환을 위해 2x3 크기의 변환 행렬을 만들어야 합니다.
M = np.float32([[1, 0, x_shift], [0, 1, y_shift]])
x_shift: 가로 이동 거리y_shift: 세로 이동 거리
4.3 cv2.warpAffine() 문법
cv2.warpAffine(src, M, dsize)
src: 원본 이미지M: 2x3 변환 행렬dsize: 출력 이미지 크기
4.4 cv2.warpAffine() 사용 예제
import cv2
import numpy as np
# 이미지 불러오기
image = cv2.imread('sample.jpg')
rows, cols = image.shape[:2]
# 이동 변환 행렬 생성 (오른쪽 50px, 아래쪽 30px 이동)
M = np.float32([[1, 0, 50], [0, 1, 30]])
shifted = cv2.warpAffine(image, M, (cols, rows))
cv2.imshow('Shifted Image', shifted)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. 결론
이번 포스팅에서는 OpenCV를 활용하여 이미지의 크기를 조절하고 (cv2.resize()), 회전하며 (cv2.rotate()), 이동 (cv2.warpAffine())하는 방법을 알아보았습니다.
cv2.resize(): 이미지 크기 변경cv2.rotate(): 이미지 회전cv2.warpAffine(): 이미지 이동
이러한 변환 기법은 컴퓨터 비전 프로젝트에서 자주 사용되며, 다양한 응용 사례에 활용될 수 있습니다.
반응형
'Python > OpenCV' 카테고리의 다른 글
| OpenCV를 활용한 이미지 필터링 (블러링, 가우시안 필터, 샤프닝) (0) | 2025.11.03 |
|---|---|
| OpenCV 이미지 밝기 및 명암 조절 (cv2.addWeighted()) (0) | 2025.11.02 |
| OpenCV 이미지 색상 변환 (cv2.cvtColor()) (0) | 2025.10.31 |
| OpenCV로 동영상 불러오기 및 재생 (cv2.VideoCapture()) (0) | 2025.10.30 |
| OpenCV로 이미지 불러오기 및 저장하기 (cv2.imread(), cv2.imwrite()) (0) | 2025.10.29 |