Then
Then

Reputation: 89

How to read multiple image from different folders using python with Opencv

I am trying to read multiple images from 3 different folder. Each folder contain 100 images. I try 2 different code but I have no idea why the codes does not work. Anyone can help? Thanks

For example:

Cropped Matrix:Matrix1.png, Matrix2.png,...

Cropped Marks:Mark1.png, Mark2.png,...

Cropped Marks1:Mark1Q1.png, Mark1Q2.png,...

Output: Matrix1.png + Mark1.png + Mark1Q1.png

Code 1:

#1st
path1 = os.path.abspath("C:/Users/TSL/Desktop/Crop/Cropped Matrix/*.png")
path2 = os.path.abspath("C:/Users/TSL/Desktop/Crop/Cropped Marks/*.png")
path3 = os.path.abspath("C:/Users/TSL/Desktop/Crop/Cropped Marks1/*.png")
folder= os.path.join(path1, path2, path3)

def load(folder):
   images = []

   for filename in os.listdir(folder):
      if filename.endswith(".png"):
         img = cv2.imread(os.path.join(folder, filename))
         if img is not None:
            images.append(img)
   return images

root = 'C:/Users/TSL/Desktop/Crop'
folders = [os.path.join(root, x) for x in ('Cropped Matrix', 'Cropped Marks', 'Cropped Marks1')]
all = [img for folder in folders for img in load(folder)]

cv2.imshow("Join img", all)
cv2.waitKey(0)

Code 2

#2nd
path1 = os.path.abspath('Cropped Matrix')
path2 = os.path.abspath('Cropped Marks')
path3 = os.path.abspath('Cropped Marks1')
folder= os.path.join(path1, path2, path3)

def load(folder):

    images = []

    for filename in os.listdir(folder):
        if any([filename.endswith(x) for x in [".png"]]):
            img = cv2.imread(os.path.join(folder, filename))
            if img is not None:
                images.append(img)
    return images

folders = ['Cropped Matrix', 'Cropped Marks',]

for folder in folders:
    images = load(folder)
    read = cv2.imread(images)

    cv2.imshow("Join images", read)
    cv2.waitKey(0)

Upvotes: 1

Views: 1379

Answers (1)

Sid
Sid

Reputation: 2189

all is a list of images and you try to show it using imshow. To show all images one by one you can loop through all and show each with imshow.

Also, as @gold_cy correctly points out, all is a built in python function, so you should avoid using it as a variable name. Change it to something like all_images.

all_images = [img for folder in folders for img in load(folder)]
for i in all_images:
    cv2.imshow("Image", i) #or however you want
    cv2.waitKey(10) #or any suitable number

Upvotes: 2

Related Questions