web-dev-qa-db-fra.com

Créer un tableau d'images Numpy

J'ai quelques (950) fichiers image .jpg 150x150x3 que je veux lire dans un tableau Numpy.

Voici mon code:

X_data = []
files = glob.glob ("*.jpg")
for myFile in files:
    image = cv2.imread (myFile)
    X_data.append (image)

print('X_data shape:', np.array(X_data).shape)

La sortie est (950, 150). Veuillez me faire savoir pourquoi la liste n'est pas convertie en np.array correctement et s'il existe un meilleur moyen de créer le tableau d'images.

D'après ce que j'ai lu, l'ajout aux tableaux numpy est plus facile à faire via les listes python puis les convertir en tableaux.

EDIT: quelques informations supplémentaires (si cela peut vous aider), image.shape résultats (150,150,3) correctement.

10
Abhishek Bansal

J'ai testé votre code. Cela fonctionne bien pour moi avec la sortie

('Forme X_data:', (4, 617, 1021, 3))

cependant, toutes les images avaient exactement la même dimension.

Lorsque j'ajoute une autre image avec différentes étendues, j'ai cette sortie:

('Forme X_data:', (5,))

Je recommanderais donc de vérifier les tailles et le même nombre de canaux (comme dans toutes les images, les images sont-elles en couleurs)? Vous devez également vérifier si toutes les images (ou aucune) ont des canaux alpha (voir le commentaire de @Gughan Ravikumar)

Si seul le nombre de canaux varie (c'est-à-dire que certaines images sont grises), forcez le chargement du tout au format couleur avec:

image = cv2.imread (myFile, cv2.IMREAD_COLOR)

EDIT: J'ai utilisé le code même de la question, seulement remplacé par un de mes répertoires (et "* .PNG"):

import cv2
import glob
import numpy as np

X_data = []
files = glob.glob ("C:/Users/xxx/Desktop/asdf/*.PNG")
for myFile in files:
    print(myFile)
    image = cv2.imread (myFile)
    X_data.append (image)

print('X_data shape:', np.array(X_data).shape)
13
DomTomCat

Votre définition pour le cadre .JPG qui sera placé dans une matrice de la même taille devrait être x, y, R, G, B, A. "A" n'est pas utilisé, mais il prend 8 bits à la fin de chaque pixel.

0
Bob