こんにちは。chanyoGUITARと申します。今回は掲題の件を記事にさせていただきました。
前回の記事に関連した内容ですので、お時間ございましたらこちらもどうぞ。
それでは行きましょう!
import os
import cv2
import numpy as np
def resize_image(image_path, img_height, img_width):
# 画像の読み込み
image = cv2.imread(image_path)
# リサイズ
# bottom_imageの背景画像を生成 (黒)
black_image = np.zeros((img_height, img_width, 3), np.uint8)
# 縦横比を維持しながら、重ねる画像を拡大
height_ratio = img_height / image.shape[0]
width_ratio = img_width / image.shape[1]
ratio = min(height_ratio, width_ratio)
bottom_image_org = cv2.resize(image, (0,0), fx=ratio, fy=ratio, interpolation = cv2.INTER_LINEAR)
# 重ねる画像の高さ・幅
overlay_height, overlay_width = image.shape[:2]
# 重ねる画像を中央に配置
x_offset = int((img_width - overlay_width) / 2)
y_offset = int((img_height - overlay_height) / 2)
# 背景画像に重ねる画像を貼り付け
black_image[y_offset:y_offset+overlay_height, x_offset:x_offset+overlay_width] = image
return black_image
folder_path = './input_image'
output_folder_path = './output_image'
height = 800
width = 1000
for filename in os.listdir(folder_path):
if filename.endswith('.jpeg'):
image_path = os.path.join(folder_path, filename)
output_path = os.path.join(output_folder_path, filename)
resized_image = resize_image(image_path, height, width)
# 保存
cv2.imwrite(output_path, resized_image)
実行前↓

実行後↓

すべての画像が、縦横比を変えずに、代わりにできた空白を黒色で埋めた画像に変換されます。
このコードの一部分を応用すれば様々な状況にも対応できますから、一部分だけコピーするなどしていただいて構いません。 また間違い等あればお気軽にコメントください!! 以上です!
記事は毎日投稿の予定なので、明日もぜひのぞいてみてください!それでは!
コメント