web-dev-qa-db-fra.com

Chargement de toutes les images en utilisant imread à partir d'un dossier donné

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?

15
user107986

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
20
derricw

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)
9
Mariyan Zarev
import glob
cv_img = []
for img in glob.glob("Path/to/dir/*.jpg"):
    n= cv2.imread(img)
    cv_img.append(n)`
7
A.Feliz

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
6
Rishabh Agrahari

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)
4
E-ebola virus

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]
0
Nirmal

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)
0
Cassidy S.