2017-10-09 4 views
0

Je suis nouveau sur Python. J'ai écrit (Python 3.6.1) une fonction simple pour la rotation des images à l'aide des outils skimage.transform:Python: copier des images RVB à l'intérieur de la fonction

def rotate_20rand(X): 
    X_aug = np.zeros_like(X) 
    for i,img in enumerate(X): 
     X_aug[i] = transform.rotate(img, angle=np.random.uniform(-20, 20)) 
    return X_aug 

Je passe mon jeu de données np.ndarray de (34799, 32, 32, 3) images à elle. Si les images sont en niveaux de gris, la sortie de la fonction est correcte. Cependant, après le passage des images RVB X_aug contient tous les zéros.


J'ai essayé ce qui suit:

  • D'abord, je vérifie si la fonction transform.rotate(...) fonctionne après que je passe l'image RVB à elle. Puis j'ai pensé que le problème est: X_aug[i] = transform.rotate(img, angle=np.random.uniform(-20, 20)) et essayé différentes méthodes copy.

Aucun de ceux-ci n'a aidé et je ne sais pas ce que je fais mal.

Répondre

0

Votre code fonctionne pour moi. Il produit des valeurs non nulles dans X_aug pour tout type de tableau d'entrée.

Essayez ceci:

def rotate_20rand(X): 
    return np.stack((transform.rotate(img, angle=np.random.uniform(-20, 20)) for img in X)) 
+0

Merci, @RomanMindlin, ce code fonctionne pour moi. Cependant, je n'arrive toujours pas à comprendre ce qui ne va pas avec la fonction d'origine. Utilisez-vous aussi Python 3? J'ai essayé de remplacer le code d'initialisation 'X_aug' par' X_aug = copy.deepcopy (X) 'mais après l'opération d'affectation dans la boucle, toutes les entrées de' X_aug' deviennent des zéros. –

+0

J'ai testé votre code avec Python 3.5.2, numpy == 1.13.1, scikit-image == 0.13.1. Probablement, vous avez un problème dans une autre partie du code, très probablement avec des espaces de noms de variables. S'il vous plaît, n'oubliez pas d'accepter la réponse) –