环境:python、numpy、opencv。
输入:
1、一个包含图片的文件夹,图片最好具有相同的命名格式,否则需要修改代码。
2、如果需要将多幅图片合成一张长图,可将代码中 M = N 的注释解除即可。
2*、如果需要按图片编号顺序,将每M张图合成1张长图,则可通过修改M实现。
【注】:图片路径不可包含中文,否则cv2.imread将无法读取。
代码:
# coding:utf-8
import numpy as np
import cv2
# input:
# 请把需要连接的图片放到同一个文件夹下面,图片名称最好具有相同的格式
N = 18 # 共有图片N张
M = 3 # 每M张合成一张纵向长图
# M = N # 如果仅需要合成单张图片,请解除此句的注释,令 M=N
# 路径可以是绝对路径,也可以是相对路径,注意路径中不能出现中文,否则无法被imread读取
img_path = 'C:/Users/dell/Desktop/img_combine/single/'
save_path = 'C:/Users/dell/Desktop/img_combine/out/'
G = np.ceil(N / M) # 共分为G组
G = G.astype(np.int32)
print(' image :', N, '\n',
'length :', M, '\n',
'group :', G)
for j in range(0, G):
imgs = []
# 把一组图像存到imgs里面
for i in range(j*M + 1, min((j+1)*M, N) + 1):
# 每个文件的路径
path = img_path + '1_Page' + str(i) + '.png'
mat = cv2.imread(path)
imgs.append(mat)
# 把imgs里面的数据按垂直方向合并
img = np.vstack(imgs)
# cv2.imshow('frame', img)
# 保存合成图
cv2.imwrite(save_path + 'out_' + str(j+1) + '.png', img)
参考链接:n张图像合成一个长图