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

如何使用Python和OpenCV将多张图片叠加到指定原图并保存输出

问题排查与修复代码

现有代码的问题点

  • 路径转义错误:Windows路径中的反斜杠\为转义字符,直接书写会导致路径识别异常
  • 前景图尺寸未统一:仅对底图做了1024*1024的resize操作,待叠加的光晕图尺寸未同步调整,数组维度不同会导致相加失败
  • 像素值溢出风险:直接对图像数组做算术相加,像素值超过255后会发生溢出,导致输出图像颜色异常
  • 输出路径拼接错误:输出路径未加文件夹分隔符,会导致文件名直接拼接在路径字符串末尾,无法正确存入目标文件夹
  • 冗余操作:循环内部重复读取底图文件夹的文件列表,无意义增加IO开销

修正后代码

import cv2
from os import listdir, makedirs
from os.path import isfile, join, exists
import numpy as np

path_wf = 'wf_flare'
path_fr = 'captured_flare'
# 输出文件夹路径,用原始字符串避免转义问题
output_path = r'C:\Flare\flare_img'
# 自动创建输出文件夹(如果不存在)
if not exists(output_path):
    makedirs(output_path)

# 读取两个文件夹的有效文件列表
files_wf = [f for f in listdir(path_wf) if isfile(join(path_wf, f))]
files_fr = [fl for fl in listdir(path_fr) if isfile(join(path_fr, fl))]

k = 0
target_size = (1024, 1024)
for n in range(len(files_wf)):
    # 读取两张图
    img_wf = cv2.imread(join(path_wf, files_wf[n]))
    img_fr = cv2.imread(join(path_fr, files_fr[k]))
    print(f"已读取第{n}组图片")
    
    # 统一两张图的尺寸
    img_wf = cv2.resize(img_wf, target_size, interpolation=cv2.INTER_AREA)
    img_fr = cv2.resize(img_fr, target_size, interpolation=cv2.INTER_AREA)
    
    # 用OpenCV官方加权融合API,自动处理像素截断,避免溢出
    # 参数:图1,权重1,图2,权重2,gamma偏移值
    merged_img = cv2.addWeighted(img_fr, 0.4, img_wf, 1.0, 0)
    
    # 拼接输出路径
    output_file = join(output_path, files_wf[n])
    print(f'正在生成:{output_file} 序号:{n+10991}')
    cv2.imwrite(output_file, merged_img)
    
    # 循环复用光晕图
    k += 1
    if k % 255 == 0:
        k = 0

内容的提问来源于stack exchange,提问作者Aryan Philip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:06:09