環境: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張圖像合成一個長圖