IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

[Python 3.xx] Numpy gestion image défaillante


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut [Python 3.xx] Numpy gestion image défaillante
    Bonjour,

    Je parts d'une image 128x128 et flatten donne un vecteur 128x128 = 16384
    Ensuite après insertion dans un tableau de plusieurs images
    la suite des coordonnées de ce vecteur n'est pas conservée

    Comment figer ce vecteur ?

    Le code python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    from PIL import Image
     
    x_tr = 1
    x_ts = 1
     
    train_images= np.ndarray(shape=(x_tr,128*128))
    print(train_images.shape)
    print(train_images.dtype)
     
    for i in tr_images[0:x_tr]:    
        x1 = Image.open('./............./'+i)  
        i1 = np.array(x1)/255.0
        vert1 = i1[:,:,1]
        print('Vert brut :\n',vert1)
        v1= vert1.flatten()
        print('--------------------------------------')
        print('Vert flatten :\n',v1)
        np.insert(train_images, 0, v1 ,axis=0)
        del vert1
        print('======================================')
     
    print('******************************************')    
    print('Vert dans train_images :\n',train_images[0])
    print(train_images.dtype)

    La sortie :
    (1, 16384)
    float64
    Vert brut :
    [[0.44313725 0.32941176 0.25882353 ... 0.53333333 0.55294118 0.57647059]
    [0.10588235 0.03529412 0.00784314 ... 0.30196078 0.32156863 0.34901961]
    [0. 0. 0.00392157 ... 0.00784314 0.00784314 0.00784314]
    ...
    [0.00392157 0.00392157 0.05098039 ... 0.65882353 0.56078431 0.57647059]
    [0.00392157 0.01960784 0.09803922 ... 0.6627451 0.57647059 0.60392157]
    [0.01176471 0.0627451 0.16470588 ... 0.63529412 0.59215686 0.61960784]]
    --------------------------------------
    Vert flatten :
    [0.44313725 0.32941176 0.25882353 ... 0.63529412 0.59215686 0.61960784]
    ======================================
    ******************************************
    Vert dans train_images :
    [4.65807558e-310 6.91075281e-310 4.65807558e-310 ... 3.92156863e-003
    1.56862745e-002 6.66666667e-002]
    float64
    @+

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Je ne comprends pas trop votre question, mais la manière dont vous construisez train_images me parait assez douteuse ici. L'initialisation d'abord, et ensuite l'utilisation de np.insert ...

    Outre mieux présenter ton problème, tu peux déjà construire train_images en passant par une liste comme suit :
    - Initialisation : train_images = []- Au lieu du np.insert utilisé les opérateur sur les listes (append)
    - Enfin si on veut un numpy array, transformer la liste en numpy array (appliquer un reverse au besoin si la liste est construite dans le sens inverse)

  3. #3
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    Je ne comprends pas trop votre question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    train_images= np.ndarray(shape=(x_tr,128*128))
    C'est ici que numpy créé un array non vide (avec des zéros)
    Et ensuite le insert augmente la dimension

    Vérification ici : [ Avec Ipython je n'ajoute pas les print() ]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x_tr = 1
    x_tr_dim =128
     
    del train_images
    train_images= np.ndarray(shape=(x_tr,x_tr_dim))
    train_images = np.insert(train_images, 0, np.arange(128) ,axis=0)
    train_images.shape
    (2, 128)

    train_images[0][0:10]

    array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

    train_images[1][0:10]

    array([4.65190488e-310, 1.00000000e+000, 2.00000000e+000, 3.00000000e+000,
    4.00000000e+000, 5.00000000e+000, 6.00000000e+000, 7.00000000e+000,
    8.00000000e+000, 9.00000000e+000])

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par bm Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    train_images= np.ndarray(shape=(x_tr,128*128))
    C'est ici que numpy créé un array non vide (avec des zéros)

    FAUX ! Là vous créez un array, et les valeurs qui sont dedans sont justes les valeurs qui étaient en mémoires. Donc des valeurs complètement arbitraires. Une matrice de zéros se créent avec np.zeros.

    PREUVE : Suffit de faire une petite matrice à la volée dans votre terminal python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    np.ndarray(shape=(10,10))
    Out[8]: 
    array([[ 3.37743275e-320,  1.58101007e-322,  2.43530593e-315,
             0.00000000e+000, -3.04804843e+034,  2.70308493e-316,
             8.46030384e-316,  1.35493366e-217,  1.11962548e-316,
             8.45943784e-316],
           [ 9.17276215e-047,  4.66358049e-317,  8.46030739e-316,
            -7.35987703e-184,  1.09181788e-316,  8.45939515e-316,
             1.61659802e+155,  2.71149827e-316,  8.46006234e-316,
             4.28839917e+294],
           [ 2.70554933e-316,  8.46432276e-316, -1.33580352e+121,
             2.71296505e-316,  8.46005522e-316, -9.76785139e-015,
             0.00000000e+000,  0.00000000e+000,  9.02296264e-215,
             0.00000000e+000],
           [ 0.00000000e+000,  2.57272949e+164,  4.70641005e-317,
             8.46006589e-316,  4.76427718e+087,  2.70156004e-316,
             8.45943072e-316,  1.25411639e+173,  0.00000000e+000,
             0.00000000e+000],
           [-7.90461541e+167,  2.71152871e-316,  8.46005878e-316,
             3.49576016e+214,  0.00000000e+000,  0.00000000e+000,
             9.83979115e+190,  0.00000000e+000,  0.00000000e+000,
             2.32885836e+091],
           [ 0.00000000e+000,  0.00000000e+000, -9.01603424e+032,
             0.00000000e+000,  0.00000000e+000,  2.86379662e-171,
             9.27213788e-317,  8.46027538e-316, -2.59181295e+090,
             2.71298442e-316],
           [ 8.45943428e-316, -6.55782272e+289,  4.66297180e-317,
             8.45941294e-316, -2.40991921e-110,  1.12010492e-316,
             8.45940938e-316,  1.31416033e+233,  1.12044049e-316,
             8.46008368e-316],
           [ 7.59098949e-258,  2.71297059e-316,  8.46027182e-316,
             9.51773686e+202,  1.09798027e-316,  8.46032162e-316,
             4.60429430e+147,  0.00000000e+000,  0.00000000e+000,
             3.52598084e-067],
           [ 0.00000000e+000,  0.00000000e+000,  4.18125755e-045,
             0.00000000e+000,  0.00000000e+000,  8.25224556e+139,
             9.27208255e-317,  8.46006945e-316,  1.02387206e-203,
             2.71149274e-316],
           [ 8.46012992e-316,  3.97883181e+088,  0.00000000e+000,
             0.00000000e+000,  1.08621191e+221,  9.49762944e-317,
             8.46025403e-316, -5.00788980e+032,  2.71150381e-316,
             8.46024376e-316]])
    Ensuite pas la peine de m'expliquer votre code, je vois ce que vous avez fait. Mais :
    1) si vous êtes certains que toutes vos lignes de codes sont bonnes et que vous n'êtes pas prêt à remettre en question certaines d'entre elles pourquoi venir ici ? Alors peut que votre insert est bon, mais dans tous les cas le changer en ce que j'ai suggéré permettrait déjà de montrer que vous essayé des choses. Sachant qu'un np.insert est beaucoup plus couteux en mémoire que de traiter avec une liste, puis de passer en array seulement à la fin. Donc le changement proposé n'est pas non plus complètement incensé, sans compté que sa simplifie la structure du code qui deviendra plus clair.
    2) je ne vois pas où est votre problème. Le code faisant simplement ce que vous lui demandez de faire ... Vous vous voyez un problème parce que visiblement vous n'avez pas su traduire ce que vous voulez, et c'est cela que je ne comprends pas non plus.



    EDIT : Et si vous savez déjà à l'avance la taille de la matrice finale ce qui semble être le cas ici, le mieux reste de la créer avec sa taille finale dès le début, et ensuite d'en remplir les valeurs (et on oublie aussi le np.insert dans ce cas là ! )

  5. #5
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    Ok : alors faites la suite de votre raisonnement ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # del a
    mat = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9] ])
    print(mat)
    v1 = [1, 2, 3]
    v2 = [4, 5, 6]
    v3 = [7, 8, 9]
    a = []
    # a = np.ndarray(shape=(3,3))
    a = np.append(a,v1,axis=0)
    a = np.append(a,v2,axis=0)
    print('--------------')
    print(a)
    Je veux obtenir les vecteurs lignes v1,v2,v3 en colonne ( mat )
    En definissant ndarray avec shape ,append ne fonctionne pas

    nb : Tous les vi sont des images et ne sont pas disponibles , mais
    une par une après convertion

    [Résolu ] : avec des [ ..] dans les array numpy

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Comme je l'ai dit, en démarrant par la taille de matrice finale dès le départ, on a plus de insert (ni de append). On update simplement les valeurs, la taille des données ne bougent plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    mat = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9] ])
    print(mat)
    v1 = [1, 2, 3]
    v2 = [4, 5, 6]
    v3 = [7, 8, 9]
     
    a = np.zeros((3,3))
    print(a)
    a[:,0]=v1
    print(a)
    a[:,1]=v2
    print(a)
    a[:,2]=v3
    print('--------------')
    print(a)
    Mais bon en fait maintenant que votre attente est mieux exprimée je peux vous dire que votre problème se résout en 1 ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=np.transpose(mat)
    print(a)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion images opencv python par mémoire partagée
    Par Tchef dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 12/08/2009, 15h12
  2. Quel langage pour logiciel gui/gestion image ?
    Par Invité(e) dans le forum Langages de programmation
    Réponses: 12
    Dernier message: 18/10/2006, 10h38
  3. gestion images
    Par lynyrd dans le forum Access
    Réponses: 2
    Dernier message: 01/03/2006, 13h23
  4. [état] gestion images
    Par OliveT1 dans le forum IHM
    Réponses: 19
    Dernier message: 03/01/2006, 21h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo