반응형

로드한 이미지를 정사각형 이미지가 되도록 가장자리를 0으로 채워 패딩(padding)하는 OpenCV Python 예제입니다.

최소한 이미지의 최대변 길이 이상을 입력해야 정사각형 이미지로 만들어줍니다. 그 이하인 경우에는 원본 이미지를 그대로 출력합니다. 



2022. 3. 6   최초작성

2022. 5. 28  이미지가 큰 경우에도 패딩하도록 수정



640 x 480 이미지를 로드하여 한변의 길이가 640인 정사각형 이미지를 출력하고 있습니다.

 



import cv2


def padding(img, set_size):

    try:
        h,w,c = img.shape
    except:
        print('파일을 확인후 다시 시작하세요.')
        raise

    if h < w:
        new_width = set_size
        new_height = int(new_width * (h/w))
    else:
        new_height = set_size
        new_width = int(new_height * (w/h))

    if max(h, w) < set_size:
        img = cv2.resize(img, (new_width, new_height), cv2.INTER_CUBIC)
    else:
        img = cv2.resize(img, (new_width, new_height), cv2.INTER_AREA)

 
    try:
        h,w,c = img.shape
    except:
        print('파일을 확인후 다시 시작하세요.')
        raise

    delta_w = set_size - w
    delta_h = set_size - h
    top, bottom = delta_h//2, delta_h-(delta_h//2)
    left, right = delta_w//2, delta_w-(delta_w//2)

    new_img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])

    return new_img



img = cv2.imread('Space Tree.jpg')

print(img.shape)

img = padding(img, 640)
cv2.imshow('show', img)


cv2.waitKey(0)




반응형

해보고 확인한 것을 문서화하여 기록합니다.


공부한 내용을 공유하는 공간입니다.
부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.

질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">