概要
PythonのOpenCVで画像に余白を追加するプログラムを作りました.
同じフォルダー内にある画像に対して一括で処理できます.
開発環境
- Windows10
- Python ver3.7.7
- OpenCV ver3.4.1
コード
import cv2
import os
import glob
def main():
BLUE = [255,0,0]
img_files = glob.glob('*.png')
for f in img_files:
img = cv2.imread(f)
fname, fext = os.path.splitext(f)
height, width, channels = img.shape
#画像の下に余白追加
output = cv2.copyMakeBorder(img, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=BLUE)
cv2.imwrite(fname+"_blue_flame.png", output)
if __name__ == "__main__":
main()
BLUEのかっこ内の数値はRGBの値を指定しており,数値を変えることで他の色も指定できます.このコードではcopyMakeBorderを使っており,元の画像の上下左右に青色を50ピクセル分追加します.
数値をいじることで追加する余白の量や,色を変更することができます.
出力される画像
このように元画像に余白として青色が追加されています.
元の画像(いらすとや)の背景は透明なのですが,余白追加の処理をすると背景が黒くなっています.
背景が透明ではない画像(スキマナースの画像を使用)では,以下のように問題なく使用できます.
#使い方
上に示すコードが記されたファイルと,余白を追加したい画像を同じフォルダーに入れて,コードを実行すればOK
フォルダーに入れた画像は一括で処理されます.
処理後は元の画像も残ります.
パスを指定すれば,別に同じフォルダーじゃなくてもOK
画像の拡張子に合わせて,コードを書き換える必要あり(今回はpngを指定).
#参考にしたサイト
OpenCV 画像上の基本的な処理
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_core/py_basic_ops/py_basic_ops.html
copyMakeBorderの機能についてより詳しく記述してあります.
[Python3.6]OpenCVで画像を4分割
https://qiita.com/kino15/items/56c0fffce4c14a875199
コードだけではなく,記事の書き方も参考にしてます.