l有一组不同大小的图像(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中添加填充物,使所有的图像将具有相同的大小?在例1给图像会得到(69,98,3)
EDIT1:
让我们假设L的形状有一个图像与形状(49,39,3)使L要转换到(80,60,3): input_image尺寸:{宽度= 49,唤起注意= 39}
所以顶=高度/ 2 = 19.5
底部=高度/ 2 = 19.5
左=宽度/ 2 = 24.5
右=宽度/ 2 = 24.5
output_image尺寸:{宽度= 80,高度= 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)
检查此链接:https://stackoverflow.com/questions/36044061/add-padding-to-object-in-4-channel-image – zindarod
@ Zindarod。我有黑白图像像素只有0或255。我图像中的大多数角色都是用黑色书写的。所以我需要白色像素填充。不过,我也有一些图像的字符是白色的,所以我需要黑色像素填充。如果在开放的cv中有一个技巧来检测,然后添加白色或黑色像素填充 – vincent
如果我使用cv2.resize(img,(69,98),interpolation = cv2.INTER_NEAREST)会怎么样,它会改变我的图片。我的所有图像都以中心为准字符被写入中心 – vincent