1

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)

1 Answer 1

2

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
Sign up to request clarification or add additional context in comments.

2 Comments

rename all to something else, you're overriding the built-in function all
the answer is work thanks for the help @Sid and gold_cy

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.