You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派环境下Python实现二维码图片多行列排版对齐技术问询

实现任意行列的二维码图片拼接方案

我在Raspberry Pi 4 Model B 32位系统(Linux 5.15.61-v8)的Python3虚拟环境中,用摄像头(包括罗技USB摄像头)完成了二维码图片的捕获和桌面保存,目前已经实现了1×2格式的图片拼接,现在需要知道怎么实现3×3、5×10等多行列的图片排版对齐,用来对比二维码打印是否合格。


现有捕获图片代码

import cv2
import time
 
cap = cv2.VideoCapture(0) # 摄像头设备(这里用的是罗技USB摄像头)
ret,frame = cap.read() # 读取单帧画面
 
# 设置捕获时长:4分钟
time_end = time.time() + 60*4
 
while time.time() < time_end:
    while(True):
        cv2.imshow('img1',frame) # 显示捕获的画面
        if cv2.waitKey(60) & 0xFF == ord('y'): # 按'y'键保存图片
            # 自定义保存路径
            cv2.imwrite('/home/sam/Desktop/pic.png',frame)
            cv2.destroyAllWindows()
            break
    cap.release()
    break

现有1×2拼接代码

from PIL import Image

# 读取两张图片
image1 = Image.open('/home/joy/Desktop/pic.png')
image1.show()
image2 = Image.open('/home/joy/Desktop/pic_02.png')
image2.show()

# 统一图片尺寸
image1 = image1.resize((426, 240))
image2 = image2.resize((426, 240))
image1_size = image1.size

# 创建空白拼接图:宽度为2倍单图宽,高度为单图高,背景浅灰
new_image = Image.new('RGB',(2*image1_size[0], image1_size[1]), (250,250,250))
new_image.paste(image1,(0,0))
new_image.paste(image2,(image1_size[0],0))
new_image.save("/home/joy/Desktop/pic_final.png","PNG")
new_image.show()

通用多行列图片拼接实现

要实现任意行列(比如3×3、5×10)的排版对齐,核心是统一所有图片尺寸,然后根据行列数计算拼接大图的尺寸,再按行列顺序将图片粘贴到对应位置。

步骤说明

  1. 先将所有需要拼接的图片 resize 成相同的尺寸(保证对齐)
  2. 根据指定的行数rows和列数cols,计算拼接后大图的宽(单图宽×cols)和高(单图高×rows)
  3. 创建空白背景图,背景色可自定义
  4. 遍历每张图片,计算它在大图中的坐标:x = (列索引) × 单图宽,y = (行索引) × 单图高,然后粘贴到对应位置

通用拼接代码

from PIL import Image
import os

def grid_image_collage(image_paths, rows, cols, img_size=(426, 240), bg_color=(250,250,250)):
    """
    生成任意行列的图片拼接图
    :param image_paths: 所有待拼接图片的路径列表
    :param rows: 拼接的行数
    :param cols: 拼接的列数
    :param img_size: 统一后的单图尺寸 (宽, 高)
    :param bg_color: 背景色 RGB 元组
    """
    # 检查图片数量是否匹配行列数,不足则用空白填充
    total_imgs = rows * cols
    if len(image_paths) < total_imgs:
        image_paths += [None]*(total_imgs - len(image_paths))
    
    # 统一所有图片尺寸
    images = []
    for path in image_paths:
        if path:
            img = Image.open(path).resize(img_size)
            images.append(img)
        else:
            # 空白图片填充
            blank_img = Image.new('RGB', img_size, bg_color)
            images.append(blank_img)
    
    # 计算拼接大图的尺寸
    collage_width = img_size[0] * cols
    collage_height = img_size[1] * rows
    
    # 创建空白大图
    collage = Image.new('RGB', (collage_width, collage_height), bg_color)
    
    # 遍历粘贴每张图片
    for i in range(rows):
        for j in range(cols):
            img_idx = i * cols + j
            x = j * img_size[0]
            y = i * img_size[1]
            collage.paste(images[img_idx], (x, y))
    
    return collage

# ------------------- 示例用法 -------------------
# 示例1:3×3拼接(假设你有9张图片在桌面,命名为pic_01.png到pic_09.png)
img_paths_3x3 = [f'/home/joy/Desktop/pic_{str(i).zfill(2)}.png' for i in range(1,10)]
collage_3x3 = grid_image_collage(img_paths_3x3, rows=3, cols=3)
collage_3x3.save('/home/joy/Desktop/collage_3x3.png', 'PNG')
collage_3x3.show()

# 示例2:5×10拼接(假设你有50张图片,不足则自动补空白)
img_paths_5x10 = [f'/home/joy/Desktop/pic_{str(i).zfill(2)}.png' for i in range(1,51)]
collage_5x10 = grid_image_collage(img_paths_5x10, rows=5, cols=10)
collage_5x10.save('/home/joy/Desktop/collage_5x10.png', 'PNG')
collage_5x10.show()

优化后的批量捕获图片代码

原捕获代码只能捕获1张图片,如果你需要批量捕获多张二维码图片,可以用下面的代码:按'y'保存当前帧,按'q'退出捕获

import cv2
import time

cap = cv2.VideoCapture(0)
# 设置捕获的图片编号起始值
img_count = 1
# 捕获时长:4分钟
time_end = time.time() + 60*4

while time.time() < time_end:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Capture', frame)
    key = cv2.waitKey(60) & 0xFF
    if key == ord('y'):
        # 按'y'保存图片,自动编号
        save_path = f'/home/joy/Desktop/pic_{str(img_count).zfill(2)}.png'
        cv2.imwrite(save_path, frame)
        print(f"已保存图片:{save_path}")
        img_count += 1
    elif key == ord('q'):
        # 按'q'提前退出
        print("提前退出捕获")
        break

cap.release()
cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者j ton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:00:30