LoginSignup
3
3

More than 3 years have passed since last update.

画像に余白を追加して正方形にする方法

Posted at

機械学習では画像分類等の画像認識を行う際は画像を正方形にリサイズする必要があります。
しかし、画像によってはアスペクト比が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('./sample@padding.jpg', 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('./sample@padding.jpg', padding_img)
  • 余白の追加にはcv2.copyMakeBorderを利用しました。
    • 使い方はこの記事を参考にさせて頂きました。
  • 長辺に合わせた正方形を作りたかったので以下のようにしました。
    • 画像の長辺と短辺の差分を取得
    • 横長画像→上下に余白・縦長→左右に余白を追加
    • 1辺当たりの余白は長辺の差分の半分のサイズにすることで、画像を中央寄せにする

結果

  • 横長画像
    sample3.jpg sample3@padding.jpg

  • 縦長画像
    sample.jpg sample@padding.jpg

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3