반응형
[ OpenCV ] Resize 로 이미지의 크기를 조절해보자!
cv2.Resize
cv2.resize(src, dsize, dst, fx, fy, interpolation)
이미지의 크기를 조절하는 방법엔 크게 두가지가 있습니다.
- 이미지의 절대적인 width, height 사이즈를 지정해주는 방법 : dsize
- 이미지의 상대적인 비율을 지정해주는 방법 : fx, fy
또다른 중요한 고려사항은 interpolation 입니다.
이미지의 사이즈가 커지고, 줄어들고 하는 과정에서 없던 픽셀이 새로 생겨나거나 사라질 수 있는데요.
이때 어떤 방식으로 interpolation을 처리하느냐에 따라 이미지의 품질이 달라집니다.
이를 보간법이라고 하는데 아래의 글에서 잘 설명해 주셔서 링크를 남깁니다.
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()
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()
[ 다른 글 ]
[ OpenCV ] 맥(Mac)에서 창이 안꺼질때 해결법
[ OpenCV ] 노트북 카메라 실시간으로 출력하기 : cv2.VideoCapture( )
[ PyTorch / torchvision ] draw_segmentation_masks() 사용하기
반응형
'컴퓨터 언어 > OpenCV' 카테고리의 다른 글
[ OpenCV ] 맥(Mac)에서 창이 안꺼질때 해결법 (0) | 2022.09.04 |
---|---|
[ OpenCV ] 노트북 카메라 실시간으로 출력하기 : cv2.VideoCapture( ) (0) | 2022.09.04 |
[M1 MacBook] OpenCV 설치하기 (0) | 2022.09.04 |