이미지 처리에서 가장 기본이면서도 자주 쓰이는 기능이 바로 이미지 크기 조절(Image Resize) 입니다. OpenCV에서는 cv2.resize() 함수를 중심으로 다양한 방식의 스케일링(Scaling)과 보간법(Interpolation)을 제공하며, 이미지 전처리, 데이터 증강, 모델 입력 크기 맞춤 등 여러 작업에 활용됩니다.
이미지 크기 조절(Image Resize)
이미지 크기 조절이란 입력 이미지의 가로(width)·세로(height)를 원하는 크기나 비율로 변경하는 작업을 말합니다. 대표적으로 다음과 같은 목적에 사용됩니다.
- 딥러닝 모델 입력 크기에 맞추기
- 연산 속도 향상
- 데이터 증강(Data Augmentation)
- 특정 UI/UX를 위한 이미지 비율 조절
- 다양한 해상도 디바이스 대응
OpenCV cv2.resize() 함수
✔ 기본 문법
cv2.resize(src, dsize, fx, fy, interpolation)
✔ 주요 파라미터 설명
| src | 입력 이미지 |
| dsize | 출력 해상도 (width, height). 직접 지정할 때 사용 |
| fx / fy | 가로/세로 방향 스케일 비율 (배율) |
| interpolation | 보간법 선택 옵션 |
✔ 보간법(Interpolation) 종류
| cv2.INTER_NEAREST | 가장 빠름, 품질 낮음 | 속도 최우선 |
| cv2.INTER_LINEAR | 기본값, 품질/속도 균형 | 일반적인 이미지 크기 변환 |
| cv2.INTER_AREA | 축소에 강함(↓), 노이즈 억제 | 이미지 축소 시 추천 |
| cv2.INTER_CUBIC | 고품질 확대(↑), 상대적으로 느림 | 이미지 확대 시 추천 |
| cv2.INTER_LANCZOS4 | 매우 고품질, 느림 | 고해상도 이미지 처리 |
✔ 스케일링 방식 2가지
① 절대 크기 지정 (dsize 사용)
dst = cv2.resize(img, (width, height))
② 비율 기반 크기 변경 (fx, fy 사용)
dst = cv2.resize(img, None, fx=0.5, fy=0.5)
- 가로/세로를 각각 절반 크기로 축소.
OpenCV 이미지 크기 조절 예제
1) 이미지 읽기
import cv2
img = cv2.imread("sample.jpg")
2) 절대 크기(폭 300px, 높이 200px)로 변경
resize_fixed = cv2.resize(img, (300, 200), interpolation=cv2.INTER_LINEAR)
3) 가로/세로 0.5배 축소
resize_half = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
4) 2배 확대 (고품질 Cubic 보간)
resize_up = cv2.resize(img, None, fx=2.0, fy=2.0, interpolation=cv2.INTER_CUBIC)
5) 원본 비율 유지하며 특정 폭(Width) 기준으로 리사이즈
h, w = img.shape[:2]
target_width = 500
ratio = target_width / w
target_height = int(h * ratio)
resize_ratio = cv2.resize(img, (target_width, target_height), interpolation=cv2.INTER_LINEAR)
6) 결과 확인
cv2.imshow("Fixed Size", resize_fixed)
cv2.waitKey(0) cv2.destroyAllWindows()
OpenCV에서 이미지 크기 조절은 간단해 보이지만, 보간법 선택, 비율 유지, 크기와 배율 선택 등에 따라 결과가 크게 달라질 수 있습니다. 특히 딥러닝 전처리 과정에서는 성능에도 영향을 미치기 때문에 목적에 맞는 보간법을 선택하는 것이 중요합니다.
'영상처리 도구' 카테고리의 다른 글
| OpenCV 카메라 보정, 왜곡 제거 방법 (Camera Calibration) (0) | 2025.12.02 |
|---|---|
| OpenCV 색 공간 비교로 배우는 영상처리 개념 (RGB, HSV, LAB, YCrCb) (0) | 2025.11.30 |
| OpenCV 이미지를 읽고, 보여주고, 저장하는 방법 (Python, C++) (0) | 2025.11.18 |
| OpenCV 웨이블릿 변환 Wavelet Transform (pywavelets, wavelib) (0) | 2025.10.19 |
| OpenCV 허프 변환 HoughLines, HoughLinesP (1) | 2025.08.10 |
