Python OpenCV 강좌 : 제 7강 - 확대 & 축소

Python OpenCV ZoomIn & ZoomOut

Python OpenCV 강좌 : 제 7강 - 확대 & 축소
[ Python-OpenCV ] - 윤대희

이미지 피라미드(Image Pyramid)


1

입력 이미지는 항상 동일한 크기가 아니며 너무 작거나 너무 클 수도 있습니다.

만약 알고리즘에서 요구하는 해상도가 있다면 입력 이미지의 크기를 변경해 영상 처리를 진행해야 합니다.

또한, 검출하려는 객체가 너무 작거나 입력 이미지가 너무 큰 경우 입력 이미지 자체를 변환해서 영상 처리를 진행할 수도 있습니다.

이미지 확대와 축소는 이미지 피라미드(Image pyramid)를 활용해 이미지의 크기를 원하는 단계까지 샘플링하는 작업입니다.

이미지 피라미드의 의미는 이미지의 크기를 확대하거나 축소했을 때 이미지들의 형태가 피라미드와 같이 표현됩니다.

원본 이미지에서 크기를 확대하는 것을 업 샘플링이라 하며 하위 단계의 이미지를 생성하게 됩니다.

반대로 원본 이미지에서 크기를 축소하는 것을 다운 샘플링이라 하며, 상위 단계의 이미지를 생성하게 됩니다.

이미지 피라미드로는 가우시안 피라미드(Gaussian Pyramid)라플라시안 피라미드(Laplacian pyramid)를 활용합니다.



Main Code


import cv2

src = cv2.imread("Image/fruits.jpg", cv2.IMREAD_COLOR)
height, width, channel = src.shape

dst = cv2.pyrUp(src, dstsize=(width * 2, height * 2), borderType=cv2.BORDER_DEFAULT)
dst2 = cv2.pyrDown(src)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()



Detailed Code


height, width, channel = src.shape

height, width, channel = src.shape를 이용하여 해당 이미지의 높이, 너비, 채널의 값을 저장합니다.

너비높이를 이용하여 출력 이미지 크기를 설정할 수 있습니다.



dst = cv2.pyrUp(src, dstsize=(width * 2, height * 2), borderType=cv2.BORDER_DEFAULT)

이미지 확대 함수(cv2.pyrUp)로 이미지를 2배 확대할 수 있습니다.

dst = cv2.pyrUp(src, dstSize, borderType)입력 이미지(src), 출력 이미지 크기(dstSize), 테두리 외삽법(borderType)으로 출력 이미지(dst)을 생성합니다.

출력 이미지 크기(dstSize)는 매우 세밀한 크기 조정을 필요로 할때 사용합니다.

다음과 같은 조건을 만족하는 출력 이미지 크기만 사용할 수 있습니다.


\[\left | dstSize.width - src.cols × 2 \right | \leq (dstSize.width \ mod \ 2)\] \[\left | dstSize.height - src.rows × 2 \right | \leq (dstSize.height \ mod \ 2)\]



테두리 외삽법(borderType)은 이미지를 확대하거나 축소할 경우, 이미지 영역 밖의 픽셀은 추정해 값을 할당해야 합니다.

그러므로, 테두리 외삽법은 이미지 밖의 픽셀을 외삽하는 데 사용되는 테두리 모드로, 외삽 방식을 설정합니다.



dst2 = cv2.pyrDown(src)

이미지 축소 함수(cv2.pyrUp)로 이미지를 2배 축소할 수 있습니다.

dst = cv2.pyrDown(src, dstSize, borderType)입력 이미지(src), 출력 이미지 크기(dstSize), 테두리 외삽법(borderType)으로 출력 이미지(dst)을 생성합니다.

출력 이미지 크기(dstSize)는 이미지 확대 함수에서 사용되는 방법과 동일하며, 다음과 같은 조건을 만족하는 출력 이미지 크기만 사용할 수 있습니다.


\[\left | dstSize.width × 2 - src.cols \right | \leq 2\] \[\left | dstSize.height × 2 - src.rows \right | \leq 2\]



Additional Information


픽셀 외삽법 종류

속성 의미
cv2.BORDER_CONSTANT iiiiii | abcdefgh | iiiiiii
cv2.BORDER_REPLICATE aaaaaa | abcdefgh | hhhhhhh
cv2.BORDER_REFLECT fedcba | abcdefgh | hgfedcb
cv2.BORDER_WRAP cdefgh | abcdefgh | abcdefg
cv2.BORDER_REFLECT_101 gfedcb | abcdefgh | gfedcba
cv2.BORDER_REFLECT101 gfedcb | abcdefgh | gfedcba
cv2.BORDER_DEFAULT gfedcb | abcdefgh | gfedcba
cv2.BORDER_TRANSPARENT uvwxyz | abcdefgh | ijklmno
cv2.BORDER_ISOLATED 관심 영역 (ROI) 밖은 고려하지 않음



함수 추가 정보

이미지 확대 함수BORDER_DEFAULT픽셀 외삽법만 사용할 수 있습니다.

이미지 축소 함수BORDER_CONSTANT픽셀 외삽법을 제외한 나머지 플래그만 사용할 수 있습니다.



Result


2



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python OpenCV 강좌 : 제 6강 - 회전 ⤧  Next post Python OpenCV 강좌 : 제 8강 - 크기 조절
    Python-OpenCV Category