Reputation: 165
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
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
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