如何使用 python 将多个图像叠加到某些原始图像上

How to overlay multiple images onto certain original images using python

我正在尝试创建一个程序,在该程序中我应该能够使用 python 和 opencv 将一个图像覆盖在另一个基本图像上,并将输出图像存储在另一个文件夹中。我正在使用 opencv 来实现这一点,但是我编写的代码没有给出预期的结果。

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

path_wf = 'wf_flare'
path_fr = 'captured_flare'

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))]

img_wf = np.empty(len(files_wf), dtype = object)
img_fr = np.empty(len(files_fr), dtype = object)
img = np.empty(len(files_wf), dtype = object)
k = 0
for n in range(0, len(files_wf)):
    img_wf[n] = cv2.imread(join(path_wf, files_wf[n]))
    img_fr[k] = cv2.imread(join(path_fr, files_fr[k]))
    print("Done Reading"+str(n))
    img_wf[n] = cv2.resize(img_wf[n], (1024,1024),interpolation = cv2.INTER_AREA)

    

    img[n] = 0.4*img_fr[k] + img_wf[n]

    fn = listdir(path_wf)
    name = 'C:\Flare\flare_img'+str(fn[n])
    print('Creating...'+ name + str(n+10991))
    cv2.imwrite(name,img[n])
    k += 1
    if(k%255 == 0):
        k = 0
    else:
        continue

文件夹组织粘贴如下:

我要输出图片到这里:

下一行有两个问题:

name = 'C:\Flare\flare_img'+str(fn[n])
  1. 在Python中,字符串中的特殊字符用反斜杠转义。一些示例是 \n(换行符)、\t(制表符)、\f(换页)等。在您的情况下,\f 是一个特殊字符,导致畸形的路径。解决此问题的一种方法是通过在第一个引号前添加 r 来使用原始字符串:
'C:\Flare\flare_img'
Out[12]: 'C:\Flare\x0clare_img'

r'C:\Flare\flare_img'
Out[13]: 'C:\Flare\flare_img'
  1. 创建文件系统路径时不要只是连接字符串。迟早你会放错路径分隔符。在这种情况下,它会丢失,因为 fn[n] 不是以 one 开头的。假设 fn[n] = "spam.png"。然后假设你这样做
name = r'C:\Flare\flare_img'+str(fn[n])

你对 name 的价值将是

C:\Flare\flare_imgspam.png

这不是你想要的。

按照之前的建议使用 os.path.join 或现代的 pathlib.Path。将 fn[n] 包装在 str 函数中也是多余的,因为 os.listdir 已经 returns 一个字符串列表。

您需要做的修改如下:

# add to imports section
from pathlib import Path

# add before for-loop
out_path = Path(r'C:\Flare\flare_img')

# change inside for-loop
name = out_path / fn[n]

文档:PythonStrings