이미지에 여백을 추가하여 사각형으로 만드는 방법

기계 학습에서는 화상 분류 등의 화상 인식을 할 때는 화상을 정사각형으로 리사이즈 할 필요가 있습니다.
그러나, 이미지에 따라서는 애스펙트비가 1:1이 아니기 때문에 단지 리사이즈하면 왜곡되어 버리는 일이 있습니다.
그렇게 하지 않으려면 이미지에 여백을 추가하여 사각형으로 성형하고 싶습니다.

소스 코드


import cv2
import math

if __name__ == "__main__":
  img = cv2.imread('./sample.jpg')

  height, width, color = img.shape # 画像の縦横サイズを取得

  # 縦長画像→幅を拡張する
  if height > width:
    diffsize = height - width
    # 元画像を中央ぞろえにしたいので、左右に均等に余白を入れる
    padding_half = int(diffsize / 2)
    padding_img = cv2.copyMakeBorder(img, 0, 0, padding_half, padding_half, cv2.BORDER_CONSTANT, (0, 0, 0))
    cv2.imwrite('./[email protected]', padding_img)

  # 横長画像→高さを拡張する
  elif width > height:
    diffsize = width - height
    padding_half = int(diffsize / 2)
    padding_img = cv2.copyMakeBorder(img, padding_half, padding_half, 0, 0, cv2.BORDER_CONSTANT, (0, 0, 0))
    cv2.imwrite('./[email protected]', padding_img)
  • 여백을 추가하려면 cv2.copyMakeBorder 를 사용했습니다.
  • 사용법은 이 기사 를 참고로 했습니다.

  • 장변에 맞춘 정사각형을 만들고 싶었으므로 다음과 같이 했습니다.
  • 이미지의 긴 변과 짧은 변의 차이를 얻습니다
  • 가로 이미지 → 상하에 여백, 세로 길이 → 좌우에 여백을 추가
  • 한 면당 여백은 긴 변의 절반의 크기로 설정하여 이미지를 중앙으로 정렬합니다


  • 결과


  • 가로 이미지
  • 세로 이미지
  • 좋은 웹페이지 즐겨찾기