web-dev-qa-db-ja.com

画像にパディングを追加して、同じ形状にする

l異なるサイズの画像のセット(45,50,3), (69,34,3), (34,98,3)。 lこれらの画像に次のようにパディングを追加したい:

画像全体の最大の幅と長さを取得し、画像をそのサイズにします

import os
import glob
import cv2

input_path="/home/images"
os.chdir(indput_path)
images=glob.glob("*.png")
Length=[]
Width=[]
for img in images:
    img=cv2.imread(img)
    width,length=img.shape[0:2]
    Length.append(length)
    Width.append(width)
W=max(Width)
L=max(Length)

すべての画像が同じサイズになるように、opencvにパディングを追加するにはどうすればよいですか?例では、画像が(69,98,3)

9
vincent

この関数を使用してみてください:

from PIL import Image, ImageOps


def padding(img, expected_size):
    desired_size = expected_size
    delta_width = desired_size - img.size[0]
    delta_height = desired_size - img.size[1]
    pad_width = delta_width // 2
    pad_height = delta_height // 2
    padding = (pad_width, pad_height, delta_width - pad_width, delta_height - pad_height)
    return ImageOps.expand(img, padding)


def resize_with_padding(img, expected_size):
    img.thumbnail((expected_size[0], expected_size[1]))
    # print(img.size)
    delta_width = expected_size[0] - img.size[0]
    delta_height = expected_size[1] - img.size[1]
    pad_width = delta_width // 2
    pad_height = delta_height // 2
    padding = (pad_width, pad_height, delta_width - pad_width, delta_height - pad_height)
    return ImageOps.expand(img, padding)


if __name__ == "__main__":
    img = Image.open("./demo.jpg")
    print(img)
    img = resize_with_padding(img, (500, 400))
    print(img.size)
    img.show()
    img.save("resized_img.jpg")

生の画像

パディングでサイズ変更後

参照 https://Gist.github.com/BIGBALLON/cb6ab73f6aaaa068ab6756611bb324b2

0
Wei Li