我有一组大小不同的图像(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中添加填充,以使所有图像具有相同的大小?在我给出的示例中,图像将获得(69,98,3)
的形状
9条答案
按热度按时间9jyewag01#
下面是一个函数,它可以为您完成所有任务:
nqwrtyyt2#
只需使用Pillow的
crop_pad()
,它会自动调整大小,并在需要的地方添加“零”填充(rgb=(0,0,0)/ black),而不会缩放图片。polkgigr3#
在这里,一行代码就可以完成
这将使我的图像保持在
100x100
中,并使用zero
填充保持其纵横比ou6hu8tu4#
这是我能做的最好的了,只适用于白色图像
yhived7q5#
您可以使用:
其中
src
是源图像,top
、bottom
、left
、right
是图像周围的填充。您可以在while循环中使用图像的max(sizes)-size值来为每个图像添加填充。bordertype可以是以下类型之一:
cv2.BORDER_CONSTANT
cv2.BORDER_REFLECT
cv2.BORDER_REFLECT_101
cv2.BORDER_DEFAULT
cv2.BORDER_REPLICATE
cv2.BORDER_WRAP
cv2.copyMakeBorder
教程eagi6jfj6#
在Python/OpenCV/Numpy中还有另一种方法。它使用Numpy切片将输入图像复制到一个新的图像中,该图像具有所需的输出大小和给定的偏移量。这里我计算偏移量来进行中心填充。我认为使用宽度、高度、xoffset、yoffset比使用每侧填充多少更容易做到这一点。
输入:
krcsximq7#
尝试使用此功能:
原始图像
使用填充调整大小后
参见https://gist.github.com/BIGBALLON/cb6ab73f6aaaa068ab6756611bb324b2
moiiocjp8#
如下所示(填充在openCV上称为边框):
蓝色甚至可以变成白色
来源:https://docs.opencv.org/3.4/da/d0c/tutorial_bounding_rects_circles.html
9vw9lbht9#
由于我没有看到一个公认的答案,也是一个事实,即必须确定顶部,底部,左侧,右侧的功能,我有below什么工作对我来说很容易。https://jdhao.github.io/2017/11/06/resize-image-to-square-with-padding/