OpenCV를 사용하여 이미지 크기 조정에 대해 알아보겠습니다 . 이미지 크기를 조정하려면 지정된 배율 인수를 고려하여 각 축(높이와 너비)을 따라 크기를 조정하거나, 원하는 높이와 너비를 설정하면 됩니다.
이미지 크기를 조정할 때:
- 크기가 조정된 이미지에서도 비율을 동일하게 유지하려면 원래 이미지의 종횡비(즉, 너비 대 높이)를 염두에 두는 것이 중요합니다.
- 이미지 크기를 줄이려면 픽셀을 다시 샘플링해야 합니다.
- 이미지 크기를 늘리려면 이미지를 재구성해야 합니다. 즉, 새로운 픽셀을 보간해야 합니다.
이러한 연산을 수행하기 위해 다양한 보간 기법이 사용됩니다. OpenCV에는 여러 가지 방법이 있으며, 일반적으로 특정 애플리케이션에 따라 선택이 달라집니다.
Table of Contents
- OpenCV imread() 함수를 사용하여 이미지 읽기
- 사용자 정의 너비 및 높이 로 이미지 크기 조정
- 스케일링 인자를 사용하여 이미지 크기 조정
- 다양한 보간 방법을 사용한 이미지 크기 조정
- 요약
사용자 지정 높이와 너비를 사용하여 이미지 크기를 조정하여 크기를 늘리거나 줄이는 코드 예제를 살펴보겠습니다. 더 자세히 살펴보면서 다양한 배율과 보간법을 사용하여 크기를 조정하는 방법도 알아보겠습니다.
파이썬
# let's start with the Imports
import cv2
import numpy as np
# Read the image using imread function
image = cv2.imread('image.jpg')
cv2.imshow('Original Image', image)
# let's downscale the image using new width and height
down_width = 300
down_height = 200
down_points = (down_width, down_height)
resized_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)
# let's upscale the image using new width and height
up_width = 600
up_height = 400
up_points = (up_width, up_height)
resized_up = cv2.resize(image, up_points, interpolation= cv2.INTER_LINEAR)
# Display images
cv2.imshow('Resized Down by defining height and width', resized_down)
cv2.waitKey()
cv2.imshow('Resized Up image by defining height and width', resized_up)
cv2.waitKey()
#press any key to close the windows
cv2.destroyAllWindows()
C++
// let's start with including libraries
#include<opencv2/opencv.hpp>
#include<iostream>
// Namespace to nullify use of cv::function(); syntax
using namespace std;
using namespace cv;
int main()
{
// Read the image using imread function
Mat image = imread("image.jpg");
imshow("Original Image", image);
// let's downscale the image using new width and height
int down_width = 300;
int down_height = 200;
Mat resized_down;
//resize down
resize(image, resized_down, Size(down_width, down_height), INTER_LINEAR);
// let's upscale the image using new width and height
int up_width = 600;
int up_height = 400;
Mat resized_up;
//resize up
resize(image, resized_up, Size(up_width, up_height), INTER_LINEAR);
// Display Images and press any key to continue
imshow("Resized Down by defining height and width", resized_down);
waitKey();
imshow("Resized Up image by defining height and width", resized_up);
waitKey();
destroyAllWindows();
return 0;
}
시스템에 이미 OpenCV가 설치되어 있다고 가정합니다. OpenCV를 설치해야 하는 경우 아래 관련 링크를 방문하세요.
- Windows에 OpenCV 설치
- MacOS에 OpenCV 설치
- Ubuntu에 OpenCV 설치
이미지를 읽기
아래와 같이 필요한 모듈을 가져오는 것부터 시작해 보겠습니다.
파이썬
# Importing the libraries
import cv2
import numpy as np
C++
#include<opencv2/opencv.hpp>
#include
// Namespace to nullify use of cv::function(); syntax
using namespace std;
using namespace cv;
다음으로, 이전 게시물에서 설명한 대로 함수를 사용하여 테스트 이미지를 읽어옵니다 imread(). 구문은 아래와 같습니다.

검은색과 빨간색으로 표현된 부가티 베이론 자동차 이미지입니다. 이 이미지는 기사 전체에 걸쳐 사용됩니다.
이 글에서 사용할 자동차 이미지를 읽습니다.
파이썬
# Reading image
image= cv2.imread('image.jpg')
C++
// Reading image
Mat image = imread("image.jpg");
C++ 스니펫에서는 먼저 이미지에 대한 행렬을 만든 다음 imread() 함수를 사용하여 행렬을 읽었습니다.
이미지 크기 조정을 시작하기 전에 원래 크기를 확인하세요. 이미지 크기를 구하는 방법은 다음과 같습니다.
- 파이썬에서 shape 메서드를 사용하세요
- C++의 행과 열
image.shapePython에서는 높이, 너비, 채널 수의 세 가지 값을 반환합니다.
C++에서:
image.rows 높이를 제공합니다
image.columns 이미지의 너비를 알려줍니다
위의 결과는 size()함수를 사용하여 얻을 수도 있습니다.
image.size().width 너비를 반환합니다
image.size().height 높이를 반환합니다
파이썬
# Get original height and width
h,w,c = image.shape
print("Original Height and Width:", h,"x", w)
C++
// Get height and width
cout << "Original Height and Width :" << image.rows << "x" << image.cols << endl;
여기서 중요한 점은 OpenCV는 이미지의 모양을 높이*너비*채널 format으로 출력하는 반면, 다른 이미지 처리 라이브러리는 width, height 형식으로 출력한다는 것입니다 . 여기에는 논리적인 이유가 있습니다.
OpenCV를 사용하여 이미지를 읽을 때 이미지는 NumPy 배열로 표현됩니다. 일반적으로 배열의 형태는 항상 행 * 열(행은 높이를, 열은 너비를 나타냄)를 기준으로 합니다. 따라서 OpenCV로 이미지를 읽어서 형태를 구할 때에도 동일한 NumPy 배열 규칙이 적용됩니다. 그리고 모양의 형태는 높이 * 너비 * 채널 형태입니다.
크기 조정 함수 구문
먼저 OpenCV resize()함수 구문을 살펴보겠습니다. 두 개의 입력 인수만 필요합니다.
- 소스 이미지
- 조정된 이미지의 원하는 크기입니다 dsize.
아래 섹션에서는 다양한 입력 인수 옵션에 대해 설명하겠습니다.
resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
- src: 필수 입력 이미지입니다. 입력 이미지의 경로를 담은 문자열일 수 있습니다(예: 'test_image.png').
- dsize: 출력 이미지의 원하는 크기이며, 높이와 너비를 새롭게 지정할 수 있습니다.
- fx: 수평축을 따라 축척 계수입니다.
- fy: 수직축을 따라 축척 계수입니다.
- interpolation: 이미지 크기를 조절하는 다양한 방법을 제공합니다.
너비와 높이를 지정하여 크기 조정
첫 번째 예제에서는 이미지 크기를 줄이는 새로운 너비와 높이를 지정하여 이미지 크기를 조정해 보겠습니다. 아래 코드에서:
- 원하는 너비를 300으로 설정하고, 원하는 높이를 200으로 설정합니다.
- 이 두 값은 resize() 함수가 요구하는 2차원 벡터로 결합됩니다.
- 또한 보간 방법도 지정하는데, 이는 기본값입니다.
파이썬
# Set rows and columns
# lets downsize the image using new width and height
down_width = 300
down_height = 200
down_points = (down_width, down_height)
resize_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)
C++
// Set rows and columns
// lets downsize the image using new width and height
int down_width = 300;
int down_height = 200;
Mat resize_down;
// resize down
resize(image, resize_down, Size(down_width, down_height), INTER_LINEAR);
다음으로, 이미지의 크기를 늘리기 위해 또 다른 변수를 생성합니다.
파이썬
# Set rows and columns
up_width = 600
up_height = 400
up_points = (up_width, up_height)
# resize the image
resized_up = cv2.resize(image, up_points, interpolation = cv2.INTER_LINEAR)
C++
// Set rows and columns
int up_width = 600;
int up_height = 400;
Mat resized_up;
//resize up
resize(image, resized_up, Size(up_width, up_height), INTER_LINEAR);
위 Python 스니펫에서는 함수를 사용하여 이미지 크기를 조정하기 위해 새로운 너비와 높이를 정의합니다 resize(). 처리 과정과 단계는 이전 스니펫과 유사합니다.
C++ 스니펫 에서 :
- 업스케일링을 위해 너비와 높이에 대한 새로운 정수를 정의합니다 .
- 출력 이미지에 대한 행렬을 제공하세요.
- resize()그런 다음 이전 스니펫과 동일한 함수를 사용합니다 .
이제 OpenCVimshow() 의 함수를 사용하여 모든 이미지를 표시해 보겠습니다 .
파이썬
# Display images
cv2.imshow('Resized Down by defining height and width', resized_down)
cv2.waitKey()
cv2.imshow('Resized Up image by defining height and width', resized_up)
cv2.waitKey()
cv2.destroyAllWindows()
C++
// Display Images and press any key to continue
imshow("Resized Down by defining height and width", resized_down);
waitKey();
imshow("Resized Up image by defining height and width", resized_up);
waitKey();
destroyAllWindows();
크기를 조정한 이미지와 크기를 조정한 이미지를 보여주는 그림입니다.

왼쪽 이미지는 크기를 줄인 이미지이고, 오른쪽 이미지는 크기를 늘린 이미지입니다.
크기 조정 작업은 예상대로 작동했습니다. 새로 정의한 높이와 너비 매개변수에 따라 이미지가 커지거나 작아졌습니다. 하지만 한 가지 주의해야 할 점은 너비와 높이 값을 명시적으로 정의하여 크기를 조정하면 결과 이미지가 왜곡된다는 것입니다. 즉, 이미지의 종횡비가 그대로 유지되지 않습니다.
그렇다면 이 문제를 어떻게 해결할까요? 크기를 조정할 때 배율을 사용하는 법을 배워야 합니다.
크기 조정 요소를 사용하여 크기 조정
좋아요, 이제 배율 인수를 사용하여 이미지 크기를 조정해 보겠습니다 . 하지만 더 진행하기 전에 배율 인수가 정확히 무엇인지 알아야 합니다.
스케일링 팩터 (Scaling Factor)는 일반적으로 특정 양 (이 경우 이미지의 너비와 높이) 을 늘리거나 늘리는 숫자 입니다 . 가로 세로 비율을 유지하고 디스플레이 품질을 유지하는 데 도움이 됩니다. 따라서 이미지를 확대 하거나 축소할 때 이미지가 왜곡되지 않습니다 .
파이썬
# Scaling Up the image 1.2 times by specifying both scaling factors
scale_up_x = 1.2
scale_up_y = 1.2
# Scaling Down the image 0.6 times specifying a single scale factor.
scale_down = 0.6
scaled_f_down = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
scaled_f_up = cv2.resize(image, None, fx= scale_up_x, fy= scale_up_y, interpolation= cv2.INTER_LINEAR)
C++
// Scaling Up the image 1.2 times by specifying both scaling factors
double scale_up_x = 1.2;
double scale_up_y = 1.2;
// Scaling Down the image 0.6 times specifying a single scale factor.
double scale_down = 0.6;
Mat scaled_f_up, scaled_f_down;
//resize
resize(image,scaled_f_down, Size(), scale_down, scale_down, INTER_LINEAR);
resize(image, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);
위의 Python 스니펫 에서 :
- 우리는 수평 및 수직 축을 따라 새로운 스케일링 요소를 정의합니다 .
- 확대 계수를 정의하면 너비와 높이에 대한 새로운 점을 설정할 필요가 없어집니다. 따라서 dsize는 None으로 유지합니다.
위의 C++ 스니펫 에서 :
- 우리는 새로운 이미지에 대한 새로운 스케일링 요소와 행렬을 정의합니다.
- 너비와 높이에 대한 새로운 포인트가 필요하지 않으므로 Size() 비워 두고 resize()함수를 사용합니다.
이제 시각화와 더 나은 이해를 위해 이미지를 표시해 보겠습니다.
파이썬
# Display images and press any key to check next image
cv2.imshow('Resized Down by defining scaling factor', scaled_f_down)
cv2.waitKey()
cv2.imshow('Resized Up image by defining scaling factor', scaled_f_up)
cv2.waitKey()
C++
// Display images and Press any key to continue check next image
imshow("Resized Down by defining scaling factor", scaled_f_down);
waitKey();
imshow("Resized Up by defining scaling factor", scaled_f_up);
waitKey();

왼쪽 이미지는 축소된 버전이고 오른쪽 이미지는 확대된 버전입니다.
다양한 보간 방법을 사용한 크기 조정
다양한 크기 조정 목적에 따라 다양한 보간 방법이 사용됩니다.
- INTER_AREA: INTER_AREA 리샘플링에 픽셀 면적 관계를 사용합니다. 이는 이미지 크기를 줄이는 데 가장 적합합니다. 이미지를 확대할 때 이 INTER_NEAREST방법을 사용합니다.
- INTER_CUBIC: 이 방법은 이미지 크기 조정에 바이큐빅 보간법을 사용합니다. 새 픽셀의 크기를 조정하고 보간할 때, 이 방법은 이미지의 4×4 인접 픽셀에 적용됩니다. 그런 다음 16개 픽셀의 가중치 평균을 구하여 새로운 보간 픽셀을 생성합니다.
- INTER_LINEAR: 이 방법은 보간법과 다소 유사합니다 INTER_CUBIC. 하지만 와는 달리 INTER_CUBIC, 이 방법은 보간된 픽셀의 가중 평균을 구하기 위해 2×2 인접 픽셀을 사용합니다.
- INTER_NEAREST: 이 INTER_NEAREST방법은 최근접 이웃 개념을 보간법에 사용합니다. 이는 가장 간단한 방법 중 하나로, 이미지에서 단 하나의 인접 픽셀만을 사용하여 보간합니다.
보간 방법을 완전히 이해하지 못하더라도 걱정하지 마세요. 별도의 게시물에서 자세히 다루겠습니다.
파이썬
# Scaling Down the image 0.6 times using different Interpolation Method
res_inter_nearest = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_NEAREST)
res_inter_linear = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
res_inter_area = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_AREA)
C++
# Scaling Down the image 0.6 using different Interpolation Method
Mat res_inter_linear, res_inter_nearest, res_inter_area;
resize(image, res_inter_linear, Size(), scale_down, scale_down, INTER_LINEAR);
resize(image, res_inter_nearest, Size(), scale_down, scale_down, INTER_NEAREST);
resize(image, res_inter_area, Size(), scale_down, scale_down, INTER_AREA);
위의 Python 코드 조각에서는 다양한 보간 방법을 사용하여 이미지 크기를 조절합니다 . 마찬가지로 C++ 코드 조각에서는 먼저 출력 이미지에 대한 새로운 행렬을 정의한 다음 다양한 보간 방법을 사용하여 크기를 조절합니다. 이제 이미지를 표시해 보겠습니다.
파이썬
# Concatenate images in horizontal axis for comparison
vertical= np.concatenate((res_inter_nearest, res_inter_linear, res_inter_area), axis = 0)
# Display the image Press any key to continue
cv2.imshow('Inter Nearest :: Inter Linear :: Inter Area', vertical)
C++
Mat a,b,c;
vconcat(res_inter_linear, res_inter_nearest, a);
vconcat(res_inter_area, res_inter_area, b);
vconcat(a, b, c);
// Display the image Press any key to continue
imshow("Inter Linear :: Inter Nearest :: Inter Area :: Inter Area", c);

다양한 보간 방법을 사용한 이미지 크기 조정을 보여주는 그림
왼쪽은 INTER_LINEAR , 가운데는 INTER_NEAREST , 오른쪽은 INTER_AREA입니다 .
이제 resize()OpenCV의 해당 함수에 익숙해지셨기를 바랍니다. 또한 몇 가지 다른 방법으로 이미지 크기를 조정하는 방법도 살펴보았습니다.
아래 GIF는 이미지 너비와 높이에 따른 크기 조정, 크기 조정 요소, 다양한 보간 방법 등 여러분이 배운 모든 크기 조정 작업에 대한 전체 코드를 실행하는 과정을 보여줍니다.

웹 앱에서 크기 조정 기능이 실제로 작동하는 모습을 확인하세요.
이제 크기 조절 기능과 그 유용성에 대해 명확하게 이해하셨으니, 웹 앱에서 직접 사용해 보시는 건 어떠세요? 웹 앱에서도 크기 조절 효과를 확인해 보세요. Streamlit을 사용하여 이 기능을 위한 간단한 데모 애플리케이션을 만들었습니다 . 애플리케이션 페이지는 여기에서 확인하실 수 있습니다 . 제공된 이미지를 활용하거나 원하는 이미지를 업로드해 보세요. resize()
요약
사용자 지정 높이와 너비를 사용하여 이미지 크기를 조정하는 방법을 알아보았습니다. 또한 배율 인수를 사용하여 종횡비를 그대로 유지하여 크기가 조정된 이미지가 왜곡되지 않도록 하는 방법도 살펴보았습니다. 또한 다양한 유형의 보간 방법에 대해서도 논의했습니다.
이 게시물의 Colab Notebook은 여기에서 확인할 수 있습니다 .
'OpenCV' 카테고리의 다른 글
| OpenCV 이미지 임계값 처리 Thresholding (0) | 2025.09.10 |
|---|---|
| OpenCV 색 공간 C++, Python (1) | 2025.09.10 |
| OpenCV 이미지 변환 및 회전 (0) | 2025.09.09 |
| OpenCV 이미지 자르기 (0) | 2025.09.09 |
| OpenCV 초보자는 여기서 시작하세요. (0) | 2025.09.08 |
| OpenCV를 사용하여 비디오 읽기 및 쓰기 (0) | 2025.09.08 |
| OpenCV를 사용하여 이미지 읽기, 표시 및 쓰기 - 시리즈 (2) | 2025.09.04 |
| OpenCV 이미지에 글씨 쓰기 - LearnOpenCV (0) | 2025.09.04 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩