반응형

로드한 이미지를 정사각형 이미지가 되도록 가장자리를 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)




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts