python – 为图像添加填充以使它们成为相同的形状

我有一组不同大小的图像(45,50,3),(69,34,3),(34,98,3).我想为这些图像添加填充,如下所示:

取整个图像的最大宽度和长度,然后将图像放入该尺寸

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中添加填充,以便所有图像都具有相同的大小?在示例中l给出的图像将得到(69,98,3)的形状

EDIT1:

假设我有一个形状(49,39,3)想要转换为(80,60,3)的图像:
input_image维度:{width = 49,heigh = 39}

所以top = height / 2 = 19.5

bottom = height / 2 = 19.5

左=宽度/ 2 = 24.5

右=宽度/ 2 = 24.5

output_image维度:{width = 80,height = 60}

顶= 30

底= 30

左= 40

右= 40

import cv2
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,255,255]
img1 = cv2.imread('/image.png')
constant=cv2.copyMakeBorder(img1,30,30,40,40,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(233),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
print(constant.shape)


(109, 119, 3)

但它应该是(80,60,3)

EDIT2:

有效

constant= cv2.copyMakeBorder(img1,15,16,10,11,cv2.BORDER_CONSTANT,value=BLUE)

最佳答案 您可以使用:

image = cv2.copyMakeBorder( src, top, bottom, left, right, borderType)

其中src是你的源图像,top,botto,left,right是图像周围的填充.

您可以使用max(sizes) – while循环中图像的大小值来为每个图像添加填充.
bordertype可以是以下之一:

> cv2.BORDER_CONSTANT
> cv2.BORDER_REFLECT
> cv2.BORDER_REFLECT_101
> cv2.BORDER_DEFAULT
> cv2.BORDER_REPLICATE
> cv2.BORDER_WRAP

copyMakeBorder tutorial

点赞