머신러닝 & 딥러닝/컴퓨터 비전

[OpenCV with Python] - 11. 이미지(영상)의 크기 변환(확대 및 축소) : cv2.resize()

by seokii 2021. 9. 26.
728x90
반응형

코드 및 이미지 : https://github.com/Seokii/Study_OpenCV

 

GitHub - Seokii/Study_OpenCV: study about OpenCV

study about OpenCV. Contribute to Seokii/Study_OpenCV development by creating an account on GitHub.

github.com

 

이번 포스팅에서는 OpenCV의 cv2.resize() 함수를 사용하여 이미지의 크기를 조절해보도록 하겠습니다.

 

함수 설명

1. cv2.resize(src, dsize, dst, fx, fy, interpolation) -> dst

  • src : 입력 영상(이미지)
  • dsize : 결과 영상(이미지)의 크기, (w, h) 형태로 입력. (0, 0)이면 fx와 fy를 사용.
  • dst : 출력 영상(이미지)
  • fx, fy : x, y 방향 스케일 비율(scale factor), dsize 값이 0이어야 유효함.
  • interpolation : 보간법 지정. 기본값은 cv2.INTER_LINEAR

 

2. interpolation 인자 종류

 

cv2.INTER_NEAREST : 최근방 이웃 보간법

- 가장 빠르지만 성능이 다소 떨어집니다. 잘 쓰이지 않습니다.

 

cv2.INTER_LINEAR : 쌍 선형 보간법

- 효율이 뛰어납니다. 속도와 성능도 준수하여 가장 많이 사용됩니다. 영상 확대 시 주로 이용됩니다.

 

cv2.INTER_CUBIC : 바이큐빅 보간법

- 쌍 선형보다 느리지만 성능이 더 우수합니다. 영상 확대 시 주로 이용됩니다.

 

cv2.INTER_LANCZOS4 : Lanczos 보간법

- 좀 더 복잡해서 오래 걸리지만 훨씬 성능이 우수합니다.

 

cv2.INTER_AREA : 영역 보간법

- 영역의 특징을 추출하여 결과를 지정합니다. 영상 축소 시 주로 이용됩니다.

 

 

주피터 노트북으로 구현하기

In [1] : 

import numpy as np
import cv2

In [2] : 

image = cv2.imread("images/cat.jpg", cv2.IMREAD_GRAYSCALE)

- 필요한 라이브러리와 이미지를 불러옵니다.

- 이미지는 그레이스케일(흑백)으로 불러왔습니다.

 

 

In [3] : 

image.shape

Out [3] : 

(426, 640)

- 이미지의 행렬 크기를 확인합니다.

 

 

In [4] :

resized_image_1 = cv2.resize(image, (768 ,576))
resized_image_2 = cv2.resize(image, (0,0), fx=0.8 ,fy=0.8, interpolation = cv2.INTER_AREA)

- 첫 번째는 절대 크기로 이미지를 확대시켰습니다.

- 두 번째는 절대 크기를 (0,0)으로 지정한 뒤, fx와 fy를 사용하여 상대적인 크기로 조정했습니다.

- 두 번째는 이미지를 축소시키기 때문에 영역 보간법을 이용했습니다.

 

 

In [4] : 

cv2.imshow("original", image)
cv2.imshow("resized_image_1", resized_image_1)
cv2.imshow("resized_image_2", resized_image_2)
cv2.waitKey(0)
cv2.destroyAllWindows()

- 원본 사진 및 크기 변환의 결과 사진 2개의 결과를 출력하는 코드입니다.

 

Out [4] : 

- 이미지의 순서 대로 각각 축소 이미지, 원본 이미지, 확대 이미지의 출력 결과 입니다.

 

 

728x90
반응형

댓글