在深度神经网络训练过程中,常常需要将图像有重叠的切割后送入网络。我现在把这段简单的代码放出来供大家参考。
import numpy as np
import cv2
def cutimg(img,num,overlap_factor):
'''img 是图像矩阵,num是切过后子图数目,因为统一为正方形切图,因此这里的num开方后需要为整数,
overlap_factor 是切分后重叠部分的步长'''
factor = int(np.sqrt(num))
rawshape = max(img.shape)
cutrawshape = rawshape // (factor)
resizeshape = int(cutrawshape // 32) * 32 # 因为模型要求最小送入矩阵为32
img = cv2.resize(img, (factor*resizeshape, factor*resizeshape))
img_stacks = [] # 返回结果装载矩阵
overlap_factor = overlap_factor
cutshape = int((factor*resizeshape+overlap_factor)/factor) # 需要保证除以factor整除
for i in range(factor):
for ii in range(factor):
img_temp = img[(ii*cutshape-ii*overlap_factor):((ii+1)*(cutshape)-ii*overlap_factor),(i*cutshape-i*overlap_factor):((i+1)*cutshape-i*overlap_factor)]
img_stacks.append(img_temp)
return img_stacks
实际按照倾向左上的方式进行重叠,示意图如下: