Reputation: 50
I am trying to create a program in which I should be able to overlay one image over another base image using python and opencv and store the output image in an other folder . I am using opencv to achieve this however the code I have written is not giving the desired result.
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
the folder organization is pasted below:
I want the output images to come here:
Upvotes: 1
Views: 702
Reputation: 704
There are two issues in the following line:
name = 'C:\Flare\flare_img'+str(fn[n])
\n
(newline), \t
(tab), \f
(form feed), etc. In your case, the \f
is a special character that leads to a malformed path. One way to fix this is to use raw strings by adding an r
before the first quote:'C:\Flare\flare_img'
Out[12]: 'C:\\Flare\x0clare_img'
r'C:\Flare\flare_img'
Out[13]: 'C:\\Flare\\flare_img'
fn[n]
does not start with one. Let's say that fn[n] = "spam.png"
. Then assuming you doname = r'C:\Flare\flare_img'+str(fn[n])
your value for name
will be
C:\\Flare\\flare_imgspam.png
which is not what you intended.
Use os.path.join
or the modern pathlib.Path
as previously suggested. It is also redundant to wrap fn[n]
in the str
function because os.listdir
already returns a list of strings.
The changes you need to make are as follows:
# 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]
Documentation: Python Strings
Upvotes: 1