我有一组不同大小的图像(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