Le chargement et l'enregistrement des images dans OpenCV sont assez limités, alors ... quelles sont les méthodes préférées pour charger toutes les images d'un dossier donné? Devrais-je rechercher des fichiers dans ce dossier avec des extensions .png ou .jpg, stocker les noms et utiliser imread
avec chaque fichier? Ou y a-t-il un meilleur moyen?
Pourquoi ne pas simplement essayer de charger tous les fichiers du dossier? Si OpenCV ne peut pas l'ouvrir, eh bien. Passons au suivant. cv2.imread()
renvoie None
si l'image ne peut pas être ouverte. C'est un peu bizarre que cela ne soulève pas d'exception.
import cv2
import os
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))
if img is not None:
images.append(img)
return images
J'ai utilisé skimage. Vous pouvez créer une collection et accéder aux éléments de manière standard, c’est-à-dire col [index]. Cela vous donnera les valeurs RVB.
from skimage.io import imread_collection
#your path
col_dir = 'cats/*.jpg'
#creating a collection with the available images
col = imread_collection(col_dir)
import glob
cv_img = []
for img in glob.glob("Path/to/dir/*.jpg"):
n= cv2.imread(img)
cv_img.append(n)`
Vous pouvez également utiliser matplotlib pour cela, essayez ceci:
import matplotlib.image as mpimg
def load_images(folder):
images = []
for filename in os.listdir(folder):
img = mpimg.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
return images
vous pouvez utiliser la fonction glob pour le faire. voir l'exemple
import cv2
import glob
for img in glob.glob("path/to/folder/*.png"):
cv_img = cv2.imread(img)
Si toutes les images ont le même format:
import cv2
import glob
images = [cv2.imread(file) for file in glob.glob('path/to/files/*.jpg')]
Pour lire des images de différents formats:
import cv2
import glob
imdir = 'path/to/files/'
ext = ['png', 'jpg', 'gif'] # Add image formats here
files = []
[files.extend(glob.glob(imdir + '*.' + e)) for e in ext]
images = [cv2.imread(file) for file in files]
Pour ajouter à la réponse de Rishabh et lui permettre de gérer des fichiers qui ne sont pas des images trouvées dans le dossier.
import matplotlib.image as mpimg
images = []
folder = './your/folder/'
for filename in os.listdir(folder):
try:
img = mpimg.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
except:
print('Cant import ' + filename)
images = np.asarray(images)