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

Python Discussion :

Aide Python 3, image


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut Aide Python 3, image
    Bonjour a tous, j'aurai besoin de votre aide. Je suis une matirer de programmation a la fac sur python 3. Et j'ai un projet a effectué avec une sujet precis. Je dois faire un pogramme qui suit le deplacement de cellule (en gros). Pour sa jai un dossier txt ou:
    La couleur d’un pixel est représenté par trois nombres compris entre 0 et 255, qui
    correspondent respectivement aux intensités des composantes : rouge, vert et bleu. Un point
    noir a pour valeurs 0 0 0 ; un point blanc 255 255 255 ; le triplet 169 13 157 représente du
    violet, etc.
    • Une image est formée de 452 × 452 pixels. Chaque ligne de pixels est écrite dans le fichier
    texte sous forme d’une ligne de 452 × 3 = 1356 nombres. 452 lignes décrivent une image, et
    les 60 images d’une série sont écrites à la suite dans le fichier, qui comporte donc 452 × 60
    = 27120 lignes.
    Dans le fichier txt les nombre sont présenter ainsi:0 0 0 0 0 0 0 0 1 2 5 6 4 0 0 0 0 etc...
    J'ai simplement besoin que vous maider sur un point: Je veux pouvoir utiliser ce fichier txt pour reformer l'image dex cellules, jai essayer sa:
    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
     
    import re
    import copy
    import matplotlib.pyplot as plt
    N=452
    C=open('SerieC.txt','r')
    ligne=C.readline()
    M=[]
    for x in range(N):
        M.append([])
        for j in range(N):
            M[x].append(0)
     
    for i in range(N):
        for j in range(N):
            M[i][j]=ligne
        ligne=C.readline()   
     
     
     
     
     
    plt.imshow(M,cmap=plt.get_cmap('gray'), interpolation='none')
    plt.show()
    Mais jobtiens une image blanche et ce message TypeError: Image data cannot be converted to float
    Merci de votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur d'Études et de Recherche
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'Études et de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut
    Bonjour à toi,

    Je ne suis pas sûr d'avoir bien compris comment sont stockés les valeurs des pixels.
    Par exemple, pour une suite de 3 pixels noir, blanc, noir, tu aurais :
    0 0 0 255 255 255 0 0 0
    C'est bien ça ?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut
    oui cest sa, dans un fichier txt et ils sont présenter comme tu viens de le faire

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur d'Études et de Recherche
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'Études et de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Par défaut
    Dans ce cas, je te propose d'utiliser la librairie numpy.
    Tu utilises la fonction loadtxt sur ton fichier texte, ce qui va générer une matrice de 27120 lignes par 1356 colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import numpy as np
     
    arr = np.loadtxt('fichier.txt')
    Ensuite, il faut redimensionner ton array, pour cela, utilises la méthode reshape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arr = arr.reshape(452, 452, 3, 60)
    Cela va redimensionner en une matrice 4D, tu auras 60 matrices 3D de 452x452 pixels de 3 canaux (RVB)
    Note que tu peux directement reshape quand tu charges le txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arr = np.loadtxt('fichier.txt').reshape(452, 452, 3, 60)

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut
    Merci de ton aide! jessaye quand je suis chez moi, mais le pb cest que faut que je vois avce le prof si je peut utiliser numpy, car on la pas vu en cours (on fais encore du pythoin "basique" et je pense quil veule qon comprenne mieu lalgo et la programmation, je te tiens au courant!

  6. #6
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 30
    Par défaut Il faut faire attention aux types des variables
    Je pense qu'il y a plusieurs problèmes.
    1) comme tu lis du texte il faut le convertir en nombre
    ta variable ligne contient une chaine ' 10 25 30 150 … '
    tu peux dans un premier temps obtenir une liste de chaine de caractères en utilisant la fonction split pour obtenir ['10',25,30,150',...]
    puis convertir en nombre avec par exemple la fonction int ou la fonction plt.unint8 (pour avoir le type entier codé sur 8 bits)
    il te reste alors à récupéré les "paquets de 3 nombres" pour formés les triplets correspondant aux pixels.
    2) dans la fonction imshow(), comme c'est une image en RVB, je pense qu'il ne faut pas de cmap.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut
    Merci de ta réponse, ça m'a bien aidé, je suis juste bloqué à la partie "séparer les chiffre de la liste par 3".
    J'ai fait ça (j'essaye sur juste la première ligne du fichier):
    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
    N=452
    C=open('SerieC.txt','r')
    ligne=C.readline()
    m=ligne.split()
    matrice=[]
    for element in m:
        element=int(element)
        matrice.append(element)
    M=[]
    for i in range(452):
        M.append([])
        for j in range(452):
            M[i].append(0)  
     
    for k in range(N):
        i=0
        for l in range(2):
            M[k][l]=0 # (ici je ne vois pas comment faire pour séparer par trois, jai donc mis 0 pour voir si je peut avoir un liste de liste de cette forme [[0,0,0],[0,0,0]...)
     
     
    print(j)
    j'ai ce message d'erreur :
    list index out of range
    Merci

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 627
    Par défaut
    Toujours les mêmes conseils : et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(type(i), type(j))
    Bien positionnées, ces instructions sont toujours magiques.

  9. #9
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 30
    Par défaut
    1)Je ne comprends pas que tu ais un message d'erreur sur les index si tu n'as que ces lignes ????
    2) Que vient faire le print(j) alors que j est un compteur de boucle et tu es en dehors ?
    3) Je ne comprends pas ta démarche Que veux tu obtenir dans M ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    M=[]
    for i in range(452):
        M.append([])
        for j in range(452):
            M[i].append(0)
    Car là tu as une liste de 452 listes (qui je suppose correspondent à tes lignes avec 452 0.
    Si tu veux à la place du 0 un triplet par exemple [50,45,150] , [30,230,35] ,... correspondant aux pixels de ta ligne
    pense à l'index de 50,45,150,30,230,35 dans ta variable matrice.

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut
    Alors, merci pour vos reponse, jai reussi a recré limage par rapport au fichier txt.
    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
    import matplotlib.pyplot as plt
    N=452
    C=open('SerieC.txt','r')
     
    matrice=[]
    ligne=C.readline()
    for a in range(452):
        piligne=[]
        s=ligne.split()
        for element in s:
            element=int(element)
            piligne.append(element)
       	#ici on a la liste de la premiere ligne
     
        m=[]
        c=0
        for i in range(N):   	 
            m.append([])
            for j in range(3):
                m[i].append(piligne[c])
                c=c+1
        ligne=C.readline()
        matrice.append(m)
    plt.imshow(matrice,cmap = plt.get_cmap('gray'),interpolation='none')
    plt.show()
    Ce programme a pour but de suivre le trajet de chaque cellule,et la il faut que jidentifie ou sont les cellules, un point bleu donc, cependant je n'ai vraiment aucune idée de comment faire, car le point bleu est défini dans le sujet comme un point qui a sa derniere composante tres elevé(255) mais pas forcement ce nombre (sa peut etre 250 aussi par exemple), et les deux premier point du pixel sont tres bas (0) mais pas forcement 0 sa peut etre 5. Et en plus le noyau de la cellule est formé de plusieur point bleu il faut donc faire la difference entre un pixel bleu appartenant a un noyau et a un pixel bleu appartenant a un autre noyeau. Je ne demande pas quon me donne le programme tout fais, je veux juste des piste si cest possible.
    Si je me suis mal exprimmé voila le sujet tel quil est ecris:
    L’analyse d’une série d’images doit permettre de suivre le trajet de chacune des cellules. Pour ce
    faire, nous allons repérer les noyaux, et déterminer pour chaque noyau les 60 positions qu’il occupe
    durant une expérience. Voici quelques indications méthodologiques :
    Un noyau est formé de pixels bleus. La première tâche consiste donc à catégoriser chaque pixel
    comme « bleu » ou « non bleu ». Un point bleu a sa troisième composante très élevée (mais pas
    forcément 255, certains pixels sont bleu un peu foncé) et ses deux premières composantes très
    faibles (mais pas forcément 0, le bleu n’est pas toujours pur).
    Les pixels bleus qui constituent un noyau sont contigus, et deux noyaux ne se chevauchent
    jamais. Donc, on peut regrouper les coordonnées (x,y) de tous les points formant un même noyau
    dans une liste de points. L’ensemble des noyaux est une liste de telles listes (il doit y en avoir 30).
    En parcourant le fichier texte, à chaque fois qu’on identifie un point bleu, ce point est soit un
    nouveau point d’un noyau déjà présent dans la liste (on l’ajoute à la liste des points de ce noyau),
    soit le premier point d’un nouveau noyau (on crée une nouvelle liste, qui comporte pour l’instant ce
    seul pooint).
    Lorsque tous les pixels d’une image ont été traités, on peut donner à chaque noyau une position
    unique, en faisant la moyenne des coordonnées de tous les points de ce noyau. On constitue ainsi,
    pour chaque image, une liste de 30 positions.
    Chacun des 30 noyaux se déplace relativement peu d’une image à l’autre. Pour relier entre elles
    les positions des noyaux sur les 30 images, nous considérons que le noyau Nt (un noyau sur l’image
    au temps t) est le même que le noyau N’t-1 (sur l’image à t-1) si les coordonnées de N’t-1 sont les plus
    proches de celles de Nt parmi toutes celles des noyaux de l’image à t-1. On peut ainsi reconstituer,
    pour chacun des 30 noyaux, une liste de ses 60 positions.
    Merci

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Salut,

    Citation Envoyé par Momo77230 Voir le message
    Je ne demande pas qu'on me donne le programme tout fais, je veux juste des piste si cest possiblei
    A la base, c'est du traitement d'images et vous avez méthodes et algorithmes définis pour faire çà.
    Mais on ne connait pas le contenu de votre cours et les méthodes/algos qu'on vous demande de mettre en pratique.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut
    Bah vu que cest la premiere année ou on a des modules de programmation en python, on utilise "les bases", on a pas appris de modele predefinis, la on a vu: Les liste de liste, les Expression reguliere,les fonction, recurence et dictionnaire. Les profs nous ont dis qui veule quon reste dans lalgo sans utiliser des programme deja fais pour traiter les images (je sais que on peut utiliser numpy pour le traitement dimage mais on la pas vu en cours donc je ne peut pas lutiliser je pense), donc sa devien assez complexe -_-

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par Momo77230 Voir le message
    Les profs nous ont dis qui veule quon reste dans lalgo sans utiliser des programme deja fais pour traiter les images
    Tant que vous n'aurez pas défini le (ou les) algo(s) à utiliser, vous ne saurez pas quoi programmer avec Python.
    Relisez l'énoncé:
    Un noyau est formé de pixels bleus. La première tâche consiste donc à catégoriser chaque pixel comme « bleu » ou « non bleu ». Un point bleu a sa troisième composante très élevée (mais pas forcément 255, certains pixels sont bleu un peu foncé) et ses deux premières composantes très faibles (mais pas forcément 0, le bleu n’est pas toujours pur).
    La première étape s'appelle "seuillage": à tout pixel de l'image on fait correspondre un pixel dans 0, 1 ( bleu, non-bleu).

    Les pixels bleus qui constituent un noyau sont contigus, et deux noyaux ne se chevauchent jamais.
    Ce qui s'appelle trouver les composantes connexes (les listes de points voisins).

    Maintenant que vous avez des "noms", un peu de recherche sur Internet pour voir à quoi çà ressemble et comment çà se code.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 13
    Par défaut
    Bonjour, alors jai bien avancé sur le programme mais je lai ecris pour une seul image, maintenant j'aimerai lappliqué au autre image du document. Le probleme cest quand jessaye de le faire, il y a un decalage de plus en plus abusé au fil des 60 images.

    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
    import matplotlib.pyplot as plt
    C=open('SerieC.txt','r')
     
    for x in range(60):
     
        matrice=[]
        ligne=C.readline()
        for a in range(452):
            piligne=[]
            s=ligne.split()
            for element in s:
                element=int(element)
                piligne.append(element)
               #ici on a la liste de la premiere ligne
     
            m=[]
            c=0
            for i in range(452):        
                m.append([])
                for j in range(3):
                    m[i].append(piligne[c])
                    c=c+1
            ligne=C.readline()
            matrice.append(m)
    plt.imshow(matrice,cmap = plt.get_cmap('gray'),interpolation='none')
    plt.show()
    jessaye de vous mettre le dossier avec les images quon doit obtenir et le fichier txt correspondant, mais le dossier est trop lourd, je peut faire comment psk du coup vous ne verrez pas le decalage.

Discussions similaires

  1. Aide avec Dreamweaver : Image
    Par maxime30 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 20/09/2007, 08h50
  2. Réponses: 2
    Dernier message: 28/06/2007, 09h23
  3. aide sur une image
    Par laetus dans le forum IHM
    Réponses: 5
    Dernier message: 04/10/2004, 15h54

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