'Python/OpenCV - how to load all images from folder in alphabetical order

how to load all images from given folder in alphabetical order?

Code like this:

images = []
for img in glob.glob("images/*.jpg"):
    n= cv2.imread(img)
    images.append(n)
    print (img)

...return:

...
images/IMG_9409.jpg
images/IMG_9425.jpg
images/IMG_9419.jpg
images/IMG_9376.jpg
images/IMG_9368.jpg
images/IMG_9417.jpg
...

Is there a way to get all images but in correct order?



Solution 1:[1]

Luckily, python lists have a built-in sort function that can sort strings using ASCII values. It is as simple as putting this before your loop:

filenames = [img for img in glob.glob("images/*.jpg")]

filenames.sort() # ADD THIS LINE

images = []
for img in filenames:
    n= cv2.imread(img)
    images.append(n)
    print (img)

EDIT: Knowing a little more about python now than I did when I first answered this, you could actually simplify this a lot:

filenames = glob.glob("images/*.jpg")
filenames.sort()
images = [cv2.imread(img) for img in filenames]

for img in images:
    print img

Should be much faster too. Yay list comprehensions!

Solution 2:[2]

As people mentioned, filenames.sort() order is not natural order for solve this problem use:

natsorted

file=natsorted (filenames) # ADD THIS LINE
images = []
for img in file:
    n= cv2.imread(img)
    images.append(n)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 mj.beyrami