Python实现多张图片拼接

实现自动读取一个文件夹下所有的指定格式图片,按照指定行列个数拼接成大图。

输入样例:

输出样例:(这里未按顺序输出)Python实现多张图片拼接_第1张图片

import cv2
import glob as gb
import numpy as np

"功能:将指定文件夹下所有的图片。每hangshu * lieshu 个图片组成一页,不够一页的输出到没有的那一行,不够一行的用空白代替"
"要求:所有图片尺寸一致"
"局限:glob.glob读取同一文件夹中数据读取默认并不按照顺序"

img_path = gb.glob(r'./dataA/dataA1paiyang/*.jpg')		# 读取目标文件夹下的所有指定格式图片
# sorted(img_path, key = os.path.getctime)    # 按生成时间排序
# sorted(path, key = os.path.getsize)         # 按尺寸排序
img = []            # 用于记录所有的图片数据
for pic_path in img_path:
    img.append(cv2.imread(pic_path, 1))         # 将所有数据读成np数据的列表, 注意cv2.imread读取的方式参数

print("开始生成")
pic_num = 0
num_tu = 0
hangshu = 10
lieshu = 10
bai = np.ones(img[0].shape) * 255              #
while len(img) - pic_num:    # 当拼接到的图片数量还没达到总图片数量
    hang_num = hangshu
    while hang_num and len(img) - pic_num:
        shu_num = lieshu
        while shu_num and len(img) - pic_num:
            if shu_num == lieshu:
                yihang = img[pic_num]
            else:
                yihang = np.hstack((yihang, img[pic_num]))  # 横着拼接图片shu_num次
            pic_num += 1
            shu_num -= 1
            if len(img) - pic_num == 0:
                while shu_num:
                    yihang = np.hstack((yihang, bai))
                    shu_num -= 1

        if hang_num == hangshu:
            hangs = yihang
        else:
            hangs = np.vstack((hangs, yihang))       # 每拼出一行就竖着拼接一次
        hang_num -= 1
    cv2.imwrite(f"A/A4{num_tu}.jpg", hangs)   # 输出得到的多个行组成的图片,也就是一张图
    num_tu += 1

你可能感兴趣的:(图片工具,python,opencv,计算机视觉)