本文主要分为两个部分
1)对图像进行等分,可以根据rowNum与colNum 变化等分区域。
2)批量处理。
首先是等分代码:
def imgSplit(pth,rowNum,colNum):
src = cv2.imread(pth, -1)
subImages = []
splitRowNum = rowNum #x方向切几段
splitColNum = colNum #y方向切几段
imgHeight, imgWidth = src.shape[0], src.shape[1]
subHeight = imgHeight//splitColNum #高
subWidth = imgWidth//splitRowNum #宽
for indexCol in range(splitColNum):
for indexRow in range(splitRowNum):
if indexCol < splitColNum - 1 and indexRow < splitRowNum - 1:
image_roi = src[indexCol * subHeight: (indexCol + 1) * subHeight, indexRow * subWidth: (i + 1) * subWidth] #, :
elif indexCol < splitColNum - 1:
image_roi = src[indexCol * subHeight: (indexCol + 1) * subHeight, indexRow * subWidth:] #, :
elif indexRow < splitRowNum - 1:
image_roi = src[indexCol * subHeight:, indexRow * subWidth: (indexRow + 1) * subWidth]#, :
else:
image_roi = src[indexCol * subHeight:, indexRow * subWidth:] #, :
subImages.append(image_roi)
return subImages #返回数组处理
其次是后续的批处理代码:
if __name__ == '__main__':
imgPthSrc = r"C:/Users/asus/Desktop/src/" #源路径
imgPthDir = r"C:/Users/asus/Desktop/dir/" #目标路径
srcPthlist = os.listdir(imgPthSrc)
for subClass in srcPthlist:
pthSubClass = os.path.join(imgPthSrc, subClass)
subClasslist = os.listdir(pthSubClass)
for img in subClasslist:
imgPth = os.path.join(pthSubClass, img)
subImages = imgSplit(imgPth, 1, 2)
g, b = subImages[0], subImages[1]
r = np.zeros(b.shape, dtype=np.uint8) #由于需要处理的图片只有两场图,增加一场图合成3通道图像
b[0:g.shape[0], 0:g.shape[1]] = 30
imgMerge = cv2.merge((r, g, b))
curImagePath = os.path.join(imgPthDir,subClass)
if os.path.exists(curImagePath):
cv2.imwrite(curImagePath+'/' +img , imgMerge)
else:
os.makedirs(curImagePath)
cv2.imwrite(curImagePath+'/' +img, imgMerge)
批处理大概的效果是:
单图类似的效果是,其中红色和绿色代表单通道的一场图,黄色为rgb3通道图: