코드 및 이미지 : https://github.com/Seokii/Study_OpenCV
이번 포스팅에서는 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] :
- 이미지의 순서 대로 각각 축소 이미지, 원본 이미지, 확대 이미지의 출력 결과 입니다.
'머신러닝 & 딥러닝 > 컴퓨터 비전' 카테고리의 다른 글
[OpenCV with Python] - 13. 히스토그램 계산 및 그리기 : cv2.calcHist() (0) | 2021.10.24 |
---|---|
[OpenCV with Python] - 12. 행렬 덧셈과 곱셈을 이용한 이미지(영상) 합성/합치기 (0) | 2021.09.26 |
[OpenCV with Python] - 10. 이미지(영상)의 밝기 조절 (0) | 2021.09.25 |
[OpenCV with Python] - 09. 관심 영역(ROI) 지정 및 값 확인 (0) | 2021.09.25 |
[OpenCV with Python] - 08. 컬러 채널 분리하기 (0) | 2021.09.21 |
댓글