Search code examples
pythonopencvos.path

How to add (merge) multiple images in one directory


I have two types (A and B) of images in one directory and I want to add them together (not concatenate) them like this:

A1.jpeg + B1.jpeg = Merged1.jpeg
A2.jpeg + B2.jpeg = Merged2.jpeg
      ...
AN.jpeg + BN.jpeg = MergedN.jpeg

I don't know how to customize my code so it would work for the whole directory:

import cv2
import os

for i,filenames in os.walk('.'):
    A1 = cv2.imread('A1.jpeg',0)
    B1 = cv2.imread('B1.jpeg',0)
    image = cv2.add([A1,B1])
    filename = ('Merged' + {i} + '.jpeg')
    cv2.imwrite(filename, image)

Any ideas? Thanks

EDIT:

I added counter in for loop, because you cannot define for loop in the way I did before.

import cv2
import os

i=0

for filenames in os.walk('.'):
    i = i + 1
    A = "A" + str(i) + ".jpeg"
    B = "B" + str(i) + ".jpeg"
    Ai = cv2.imread(A,0)
    Bi = cv2.imread(B,0)
    image = cv2.add([Ai,Bi])
    filename = ('Merged' + str(i) + '.jpeg')
    cv2.imwrite(filename, image)

But it only adds A1 and B1. Is this a wrong way to count in for loop?


Solution

  • I solved it like this:

    import glob
    import cv2
    
    number_of_images = 750
    
    for a_file in glob.glob('./A*'):
        for i in range(1,number_of_images):
            A = "A" + str(i) + ".jpeg"
            B = "B" + str(i) + ".jpeg"
            A1 = cv2.imread(A,0)
            B1 = cv2.imread(B,0)
            image = cv2.add([A1,B1])
            filename = ('Merged' + str(i) + '.jpeg')
            cv2.imwrite(filename, image)
            print(i)
        if i==number_of_images-1:
            break   
    

    Thanks for your advices!