'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 |
