이것도 알아야 하네?

[Python] OpenCV 예제 따라하기—3. 이미지 크기 조정 (Resizing) 본문

프로그래밍/이미지 처리

[Python] OpenCV 예제 따라하기—3. 이미지 크기 조정 (Resizing)

아직 갈 길이 먼 사람 2025. 3. 27. 02:28
728x90

이미지 크기 조정(Resizing)은 컴퓨터 비전에서 매우 중요한 작업입니다. 여러 상황에서 이미지를 원하는 크기로 변환해야 할 때가 많습니다. 예를 들어, 웹페이지에 적합한 크기로 이미지를 조정하거나, 머신러닝 모델에 입력하기 위해 동일한 크기로 이미지를 조정해야 할 때가 있습니다. OpenCV에서는 cv2.resize() 함수를 사용하여 간단히 이미지를 크기 조정할 수 있습니다. 이 글에서는 이미지 크기 조정의 기본 개념부터 여러 가지 방법에 대해 알아보겠습니다. 🚀

1. 이미지 크기 조정의 기본 🖼️

이미지 크기 조정은 간단히 말해 이미지를 주어진 크기(너비와 높이)로 변환하는 과정입니다. OpenCV에서는 이 작업을 cv2.resize()라는 함수로 할 수 있습니다. 이 함수는 기본적으로 두 가지 주요 매개변수를 받습니다:

  • 새로운 크기: 원하는 이미지의 가로, 세로 크기를 지정합니다.
  • 보간법(Interpolation): 이미지 크기를 변경할 때, 새로운 픽셀 값을 어떻게 계산할지를 결정하는 방법입니다. 

구문:

resized_image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_LINEAR)

위의 코드에서 new_widthnew_height는 새로운 크기입니다. interpolation은 이미지를 확대하거나 축소할 때 어떤 방법을 사용할지 설정합니다. 다양한 보간법이 있으며, 주로 다음과 같은 방법들이 사용됩니다:

  • cv2.INTER_NEAREST: 최근접 이웃 보간법. 빠르지만, 이미지 품질은 다소 떨어질 수 있습니다. 
  • cv2.INTER_LINEAR: 양선형 보간법. 대부분의 경우 기본으로 사용되는 보간법이며, 빠르면서도 적당한 품질을 제공합니다. 
  • cv2.INTER_CUBIC: 삼차 보간법. 이미지 확대 시 더욱 부드러운 결과를 제공하지만, 처리 시간이 더 걸립니다. 
  • cv2.INTER_LANCZOS4: Lanczos 보간법. 매우 고급스러운 품질을 제공하며, 고해상도 이미지에서 사용됩니다. 

2. 이미지 크기 조정 예시 코드 🧑‍💻

이제 cv2.resize() 함수를 사용하여 이미지를 크기 조정하는 방법을 살펴보겠습니다. 아래의 코드는 이미지를 읽어들인 후, 200x200 크기로 조정하는 예시입니다.

import cv2

# 이미지 파일 읽기
image = cv2.imread('image.jpg')

# 이미지 크기 변경 (200x200으로 크기 조정)
resized_image = cv2.resize(image, (200, 200))

# 이미지 표시
cv2.imshow('Resized Image', resized_image)

# 키를 누르면 창 닫기
cv2.waitKey(0)
cv2.destroyAllWindows()
    

위의 코드에서 cv2.imread() 함수로 이미지를 불러오고, cv2.resize()로 크기를 200x200으로 조정합니다. 그 후 cv2.imshow()를 사용하여 변경된 이미지를 화면에 표시하고, cv2.waitKey(0)으로 키 입력을 기다립니다. 키를 누르면 창이 닫히게 됩니다. 🔑

3. 비율에 맞춰 크기 조정 📏

어떤 경우에는 이미지의 비율을 유지하면서 크기를 변경해야 할 때가 있습니다. 예를 들어, 가로 크기를 400px로 설정하고 세로 크기는 자동으로 계산하여 원본 비율을 유지하는 방법을 살펴보겠습니다.

# 원본 이미지의 가로, 세로 크기 가져오기
height, width = image.shape[:2]

# 비율을 유지하면서 크기 조정
aspect_ratio = width / height
new_width = 400
new_height = int(new_width / aspect_ratio)

# 비율에 맞춰 이미지 크기 조정
resized_image = cv2.resize(image, (new_width, new_height))
    

위 코드에서는 먼저 이미지의 가로와 세로 크기를 image.shape로 가져오고, 그 비율을 계산한 후, 가로 크기를 400px로 고정하고 세로 크기는 비율에 맞게 자동으로 계산하여 크기 조정합니다. 이 방식은 비율을 유지하면서 이미지를 크기 변경할 때 유용합니다. 🔄

4. 다양한 보간법 비교 📊

보간법을 다르게 설정하면 이미지 크기 변경 시 결과가 달라질 수 있습니다. 아래 코드는 다양한 보간법을 적용하여 크기를 변경한 후, 각각의 결과를 비교합니다. 어떤 보간법을 사용할지는 이미지의 용도에 따라 선택하면 됩니다.

# 다양한 보간법을 사용하여 크기 변경
resized_nearest = cv2.resize(image, (400, 400), interpolation=cv2.INTER_NEAREST)
resized_linear = cv2.resize(image, (400, 400), interpolation=cv2.INTER_LINEAR)
resized_cubic = cv2.resize(image, (400, 400), interpolation=cv2.INTER_CUBIC)

# 이미지 표시
cv2.imshow('Nearest Interpolation', resized_nearest)
cv2.imshow('Linear Interpolation', resized_linear)
cv2.imshow('Cubic Interpolation', resized_cubic)

cv2.waitKey(0)
cv2.destroyAllWindows()
    

위 코드에서는 INTER_NEAREST, INTER_LINEAR, INTER_CUBIC의 세 가지 보간법을 적용한 후 이미지를 400x400으로 크기 조정합니다. INTER_NEAREST는 속도가 빠르지만 품질이 떨어질 수 있으며, INTER_LINEAR는 적당한 품질과 빠른 속도를 제공하고, INTER_CUBIC은 고품질의 결과를 제공합니다. 

5. 결론 🏁

OpenCV에서 이미지 크기 조정은 매우 간단하고 강력한 기능입니다. 다양한 보간법을 사용하여 이미지의 품질과 속도 간의 균형을 맞출 수 있습니다. 비율을 유지하며 크기를 조정하거나, 여러 보간법을 적용하여 최적의 결과를 얻을 수 있습니다. 여러분도 이 기능을 활용하여 이미지 처리 작업에서 더욱 효율적이고 아름다운 결과를 만들어보세요. 😃

 


OpenCV 예제 따라하기 연재글

 

[Python] OpenCV 예제 따라하기—0. 이미지 읽고 쓰기

Goal 이번 시간에는 OpenCV 모듈을 이용하여, 이미지 파일을 읽고, 보고, 저장하는 방법을 배웁니다. 1. 이미지 읽기 cv2.imread() 함수를 이용하여 이미지 파일을 읽습니다. cv2.imread(fileName, flag) Returns im

korini.tistory.com

 

[Python] OpenCV 예제 따라하기—1. 이미지 합성

지난 시간까지 이미지를 읽고, 보고, 저장하는 방법을 배웠습니다. 해당 예제를 확인하고 싶다면 ⬇⬇⬇⬇⬇⬇ OpenCV 예제 따라하기 시리즈 > 0. 이미지 읽고 쓰기 Goal 이번 시간에는 OpenCV 모듈을

korini.tistory.com

 

[Python] OpenCV 예제 따라하기—2. 흑백 이미지로 변환

지난 시간에는 이미지를 읽고, 보고, 저장하는 방법을 배웠습니다. 해당 예제를 확인하고 싶다면 ⬇⬇⬇⬇⬇⬇ OpenCV 예제 따라하기 시리즈 > 0. 이미지 읽고 쓰기 > 1. 이미지 합성 Goal 이번 시간

korini.tistory.com

 

 

728x90
Comments