AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 백준
  • 프로그래머스
  • OpenCV
  • 파이썬
  • 연습문제
  • Python
  • LEVEL2
  • 이코테
  • level1
  • 알고리즘

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV with Python] 영상 기하학적 변환 : 영상의 확대와 축소 - 크기 변환 cv2.resize
OpenCV

[OpenCV with Python] 영상 기하학적 변환 : 영상의 확대와 축소 - 크기 변환 cv2.resize

2022. 2. 2. 11:17

크기 변환(Scale transformation)

  • 영상의 크기를 원본 영상보다 크게 또는 작게 만드는 변환
  • x축과 y축방향 으로의 스케일비율(scalefactor)를 지정

 

✔︎  cv2.resize 함수

dst = cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)
  • src: 입력 영상
  • dsize: 결과 영상 크기. (w, h) 튜플. (0, 0)이면 fx와 fy 값을 이용하여 결정.
  • dst: 출력 영상
  • fx, fy: x와 y방향 스케일 비율(scale factor). (dsize 값이 0일 때 유효)
  • interpolation: 보간법 지정. 기본값은 cv2.INTER_LINEAR 

 

resize 함수는 출력 영상 크기를 픽셀 단위로 설정할 수 있다.

또한 dsize가 (0, 0)이면 스케일 비율로 출력 영상을 결정할 수 있다.

그러므로 dsize 나 fx,fy 둘 중 하나는 꼭 명시해야 한다.

 

 

interpolation

  1. cv2.INTER_NEAREST - 최근방 이웃 보간법
    가장 빠르지만 퀄리티가 많이 떨어집니다. 따라서 잘 쓰이지 않습니다.

  2. cv2.INTER_LINEAR - 양선형 보간법(2x2 이웃 픽셀 참조)
    4개의 픽셀을 이용하며, 효율성이 가장 좋다. 속도도 빠르고 퀄리티도 적당함.

  3. cv2.INTER_CUBIC - 3차회선 보간법(4x4 이웃 픽셀 참조)
    16개의 픽셀을 이용한다.
    cv2.INTER_LINEAR 보다 느리지만 퀄리티는 더 좋다.

  4. cv2.INTER_LANCZOS4 - Lanczos 보간법 (8x8 이웃 픽셀 참조)
    64개의 픽셀을 이용하며, 좀 더 복잡해서 오래 걸리지만 퀄리티는 좋다.

  5. cv2.INTER_AREA - 영상 축소시 효과적
    영역적인 정보를 추출해서 결과 영상을 셋팅하며, 영상을 축소할 때 이용한다.

 

💬  실습 

import sys
import numpy as np
import cv2


src = cv2.imread('rose.bmp') # src.shape=(320, 480)

if src is None:
    print('Image load failed!')
    sys.exit()

dst1 = cv2.resize(src, (0, 0), fx=4, fy=4, interpolation=cv2.INTER_NEAREST)
dst2 = cv2.resize(src, (1920, 1280))  # cv2.INTER_LINEAR
dst3 = cv2.resize(src, (1920, 1280), interpolation=cv2.INTER_CUBIC)
dst4 = cv2.resize(src, (1920, 1280), interpolation=cv2.INTER_LANCZOS4)

cv2.imshow('src', src)
cv2.imshow('dst1', dst1[500:900, 400:800])
cv2.imshow('dst2', dst2[500:900, 400:800])
cv2.imshow('dst3', dst3[500:900, 400:800])
cv2.imshow('dst4', dst4[500:900, 400:800])
cv2.waitKey()
cv2.destroyAllWindows()

 

 

cv2.INTER_NEAREST

 

cv2.INTER_LINEAR

 

cv2.INTER_CUBIC

 

cv2.INTER_LANCZOS4

 

 

❗️영상의 축소 시 고려할 사항

 영상 축소 시 디테일이 사라지는 경우가 발생한다.

 한 픽셀로 구성된 성분이 축소를 하게 되면서 사라지는 경우가 발생한다.

 이를 해결하기 위해 입력 영상을 부드럽게 필터링한 후 축소를 하거나 여러번 축소를 반복한다.

 

 OpenCV의 cv2.resize() 함수에서는 cv2.INTER_AREA 플래그를 사용한다.

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 영상 기하학적 변환 : 이미지 피라미드  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 영상의 대칭 변환 - cv2.flip  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 전단 변환 - cv2.warpAffine  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 이동 변환 - cv2.warpAffine  (0) 2022.02.01
[OpenCV with Python] Filtering : Noise 제거 - 양방향 필터 Bilateral Filter  (0) 2022.02.01
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바