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
  • 프로그래머스
  • 알고리즘
  • LEVEL2
  • 백준
  • level1
  • Python
  • 이코테

최근 글

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

끄적끄적 개발일지

[OpenCV with Python] 영상 기하학적 변환 : 이미지 피라미드
OpenCV

[OpenCV with Python] 영상 기하학적 변환 : 이미지 피라미드

2022. 2. 2. 14:18

이미지 피라미드 - Image pyramid

 이미지 피라미드는 하나의 영상에 대해 다양한 해상도의 영상 세트를 구성한 것이다.

 영상의 크기를 가로, 세로 반을 줄이거나 반을 키워서 다양한 크기의 영상을 생성한다.

 

 

보통가우시안 블러링 & 다운 샘플링 형태로 축소하여 구성한다.

 

이미지 피라미드를 통해 작은 크기 영상을 만드는 이유는 다음과 같다.

 

입력 영상에서 어떠한 객체를 찾고 싶을 때 영상에 존재하는 객체의 크기가 다양하다.

고양이 얼굴 크기를 지정해두고 영상에서 고양이 얼굴을 찾고 싶을 때, 지정한 고양이 얼굴 크기보다 작거나 크면 못 찾을 가능성이 있으므로, 다양한 이미지 크기를 만든다.

 

영상의 다운샘플링은 가우시안 블러링을 적용하고 축소하여 출력 영상에 자연스러운 형태나 부드러운 형태를 갖게 한다.

 

 

✔︎  cv2.pryDown 다운 샘플링 함수

dst = cv2.pyrDown(src, dst=None, dstsize=None, borderType=None)
  • src: 입력 영상
  • dst: 출력 영상
  • dstsize: 출력 영상 크기. 따로 지정하지 않으면 입력 영상의 가로, 세로 크기의 2배로 설정.
  • borderType 가장자리 픽셀 확장 방식

다운샘플링 함수의 작동방식은 먼저 5 X 5 크기의 가우시안 필터를 적용한다. 이후 짝수 행과 열을 제거하여 작은 크기의 영상을 생성 한다.

그 결과는 리사이즈와 개념은 다르지만 비슷하다.

 

 

✔︎  cv2.pryUp 업샘플링 함수

dst = cv2.pyrUp(src, dst=None, dstsize=None, borderType=None)
  • src: 입력 영상
  • dst: 출력 영상 
  • dstsize: 출력 영상 크기. 따로 지정하지 않으면 입력 영상의 가로, 세로 크기의 2배로 설정.
  • borderType 가장자리 픽셀 확장 방식 

 

💬  실습

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

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


rc = (250, 120, 200, 200)  # rectangle tuple

# 원본 영상에 그리기
cpy = src.copy() # 입력 영상의 복사본, 입력영상에 그리면 영상이 변하기 때문에 재사용이 안된다.
cv2.rectangle(cpy, rc, (0, 0, 255), 2)
cv2.imshow('src', cpy)
cv2.waitKey()

# 피라미드 영상에 그리기
for i in range(1, 4):      # 4번 축소
    src = cv2.pyrDown(src) # 작게 만들고
    cpy = src.copy()       # 작게 만든 영상의 복사본을 만들고
    # 사각형을 그림, 입력 영상이 줄었는데 그대로 rc를 넣어줌
    # shift 인자는 그림을 그리기 위한 좌표를 얼마큼 줄일 것이냐를 결정. 권장 X
    # 잔상이 남는 이유는 윈도우 바 보다 작게 영상되었을 때 잔상을 갖고옴
    # 해결하기 위해서는 매번 창을 닫아줌
    cv2.rectangle(cpy, rc, (0, 0, 255), 2, shift=i)
    cv2.imshow('src', cpy)
    cv2.waitKey()
    cv2.destroyWindow('src') # 이 작업을 반복해서 하면 영상이 짤리는 것을 방지

cv2.destroyAllWindows()

 

 

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] 영상 기하학적 변환 : 어파인 변환  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 영상의 회전 - cv2.getRotationMatrix2D  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 영상의 대칭 변환 - cv2.flip  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 영상의 확대와 축소 - 크기 변환 cv2.resize  (0) 2022.02.02
[OpenCV with Python] 영상 기하학적 변환 : 전단 변환 - cv2.warpAffine  (0) 2022.02.02
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바