본문 바로가기
컴퓨터 언어/OpenCV

[ OpenCV ] Resize 로 이미지의 크기를 조절해보자!

by SuperMemi 2022. 9. 22.
반응형

[ OpenCV ] Resize 로 이미지의 크기를 조절해보자!

 

예시 이미지

 


cv2.Resize

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

이미지의 크기를 조절하는 방법엔 크게 두가지가 있습니다.

  1. 이미지의 절대적인 width, height 사이즈를 지정해주는 방법 : dsize
  2. 이미지의 상대적인 비율을 지정해주는 방법 : fx, fy

또다른 중요한 고려사항은 interpolation 입니다.

 

이미지의 사이즈가 커지고, 줄어들고 하는 과정에서 없던 픽셀이 새로 생겨나거나 사라질 수 있는데요.

이때 어떤 방식으로 interpolation을 처리하느냐에 따라 이미지의 품질이 달라집니다.

 

이를 보간법이라고 하는데 아래의 글에서 잘 설명해 주셔서 링크를 남깁니다.

 

OpenCV 보간법 , 이미지 크기 변경

이미지의 크기를 늘릴때 픽셀로 이루어진 이미지를 어떻게 키우고 그 사이에 어떠한 픽셀을 넣는걸까 혹은 ...

blog.naver.com


Example Code


1) cv2.imread

  • cv2.imread 를 통해 이미지를 불러오게 되면 (height, width, channel) 의 구조를 가지게 됩니다.
import cv2

img = cv2.imread('ex.jpeg', cv2.IMREAD_COLOR)
print(img.shape) # (height, width, channel) = (1668, 1720, 3)

cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

 


2) cv2.resize : dsize (width, height)

  • 절대적인 이미지 크기를 지정해주는 방법입니다.
  • dsize 는 (width:가로, height:세로) 로 원하는 크기를 설정해줍니다.
  • 아래와 같이 dsize=(1000,2000) 로 설정할 경우, (가로:1000/세로:2000)으로 설정하여 세로로 긴 이미지가 만들어집니다.
  • 이렇게 변환된 이미지의 shape 은 앞에서 말한 바와 같이 (세로:2000, 가로:1000, 컬러:3) 의 구조를 가지게 됩니다.
  • 세로와 가로의 이미지 구조를 혼동하지 마세요!
# 방법 1. dsize = (width, height)

resized_img_1 = cv2.resize(img, dsize=(1000,2000), interpolation=cv2.INTER_LINEAR)
print(resized_img_1.shape) # (2000, 1000, 3)

resized_img_2 = cv2.resize(img, dsize=(2000,1000), interpolation=cv2.INTER_LINEAR)
print(resized_img_2.shape) # (1000, 2000, 3)

# 시각화

cv2.imshow("resized_img_1", resized_img_1)
cv2.imshow("resized_img_2", resized_img_2)
cv2.waitKey()
cv2.destroyAllWindows()

 

resized_img_1
resized_img_2


3) cv2.resize : fx (width ratio), fy (height ratio)

  • fx는 가로길이, fy는 세로길이에 대한 비율을 조정합니다.
  • resized_width = round(original_width * fx) 
  • resized_height = round(original_height * fy)
  • 아래의 resized_img_3 예시에서 fx=0.7 로 설정하여, 가로가 1204(=1720*0.7)로 변했습니다.
  • 그리고 fy=0.3 으로 설정하여, 세로가 500(=round(1668*0.3)=round(500.4))으로 변했습니다.
  • resized_img_4 는 직접한번 계산해 보시죠!
# 방법 2. fx = width ratio, fy = height ratio 
resized_img_3 = cv2.resize(img, dsize=(0,0), fx=0.7, fy=0.3, interpolation=cv2.INTER_LINEAR)
print(resized_img_3.shape) # (500, 1204, 3)

resized_img_4 = cv2.resize(img, dsize=(0,0), fx=0.4, fy=1.2, interpolation=cv2.INTER_LINEAR)
print(resized_img_4.shape) # (2002, 688, 3)

# 시각화

cv2.imshow("resized_img_3", resized_img_3)
cv2.imshow("resized_img_4", resized_img_4)
cv2.waitKey()
cv2.destroyAllWindows()

resized_img_3
resized_img_4


[ 다른 글 ]

[ OpenCV ] 맥(Mac)에서 창이 안꺼질때 해결법

[ OpenCV ] 노트북 카메라 실시간으로 출력하기 : cv2.VideoCapture( )

[M1 MacBook] OpenCV 설치하기

[ PyTorch / torchvision ] draw_segmentation_masks() 사용하기


 

반응형