縦横比崩さず画像リサイズ

プログラミング

こんにちは。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)

実行前↓

実行後↓

すべての画像が、縦横比を変えずに、代わりにできた空白を黒色で埋めた画像に変換されます。

このコードの一部分を応用すれば様々な状況にも対応できますから、一部分だけコピーするなどしていただいて構いません。 また間違い等あればお気軽にコメントください!! 以上です!

記事は毎日投稿の予定なので、明日もぜひのぞいてみてください!それでは!

コメント

タイトルとURLをコピーしました