Ekci
Ekci

Reputation: 165

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?

Upvotes: 12

Views: 27790

Answers (2)

mj.beyrami
mj.beyrami

Reputation: 49

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)

Upvotes: 0

ClydeTheGhost
ClydeTheGhost

Reputation: 1533

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!

Upvotes: 28

Related Questions