[ch05] 기하학적 변환 - 영상의 확대와 축소

크기 변환

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

영상의 크기 변환

cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) -> dst
  • src : 입력 영상
  • dsize : 결과 영상 크기. (w, h) 튜플. (0, 0)이면 fx와 fy 값을 이용하여 결정.
  • dst : 출력 영상
  • fx, fy : x와 y방향 스케일 비율(scale factor). (dsize 값이 0일 때 유효)
  • interpolation : 보간법 지정. 기본값은 cv2.INTER_LINEAR
    • cv2.INTER_NEAREST는 퀄리티가 낮아서 선호하지 않는다.
    • cv2.INTER_LINEAR가 속도와 성능 면에서 제일 무난하다.
    • cv2.INTER_LANCZOS4는 시간이 오래 걸리지만 퀄리티가 좋다.

영상의 크기 변환 예제

src = cv2.imread('rose.bmp')

dst1 = cv2.resize(src, (0, 0), fx=4, fy=4, interpolation=cv2.INTER_NEAREST)
dst2 = cv2.resize(src, (1920, 1280)) # default : 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])

dst1을 제외하면 육안으로 변화를 구별하기 힘들어 보인다.

영상의 축소시 고려할 사항

  • 영상 축소 시 디테일이 사라지는 경우가 발생
    • ex) 한 픽셀로 구성된 선분
  • 입력 영상을 부드럽게 필터링한 후 축소, 다단계 축소
  • OpenCV의 cv2.resize() 함수에서는 cv2.INTER_AREA 플래그를 사용

영상의 대칭 변환 (flip, reflection)

영상의 대칭 변환 함수

cv2.flip(src, flipCode, dst=None) -> dst
  • src : 입력 영상
  • flipCode : 대칭 방향 지정
  • dst : 출력 영상

좋은 웹페이지 즐겨찾기