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 :

Traitement d'image : Négatif


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 26
    Par défaut Traitement d'image : Négatif
    Bonjour, mon objectif est de mettre une image qui est en noir et blanc en négatif. Je sais que pour cela il faut modifier la valeur des pixels en faisant 255-la valeur des pixels.
    Mon problème est que je ne sais pas comment modifier la valeur des pixels de l'image, car je n'ai pas encore vue en cours la méthode PIL, existe-t-il un autre moyen pour récupérer la valeur des pixels ?

    Voici ce que j'ai fais pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fichier=open("souris_p2.pgm","w")
    fichier.write("P2 \n") #le nombre magique
    fichier.write("15 15 \n") #nombre de ligne et de colonne
    fichier.write("255 \n") #intervalle de couleur
     
    for ligne in range(0,16): 
        for colonne in range(0, 16):
            fichier.write(str(255-"valeur_du_pixel") + ' ')
        fichier.write("\n")
     
    fichier.close

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par reborn1234 Voir le message
    existe-t-il un autre moyen pour récupérer la valeur des pixels ?
    Les valeurs des pixels de quelle image ? Une que tu génères toi-même ou une image quelconque ?
    Si c'est pour celle de ton dégradé, le négatif sera le dégradé inverse

    Si c'est une image que tu n'as pas créée toi-même, ça va être un poil plus complexe, car il faudra déterminer si c'est un fichier binaire ou texte simple (P2, P5), récupérer les dimensions de l'image et travailler avec. L'avantage du binaire sera qu'il n'y aura pas de conversion de type à faire pour calculer le négatif.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 26
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Salut.

    Les valeurs des pixels de quelle image ? Une que tu génères toi-même ou une image quelconque ?
    Si c'est pour celle de ton dégradé, le négatif sera le dégradé inverse

    Si c'est une image que tu n'as pas créée toi-même, ça va être un poil plus complexe, car il faudra déterminer si c'est un fichier binaire ou texte simple (P2, P5), récupérer les dimensions de l'image et travailler avec. L'avantage du binaire sera qu'il n'y aura pas de conversion de type à faire pour calculer le négatif.
    Cette fois-ci c'est avec un fichier image au format PGM que j'ai télécharger et que je dois modifier (c'est une photo d'une souris en noir et blanc)
    Quand j'ouvre l'image avec Python j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    P2
    600 400
    255
    #et ensuite il y a les valeurs de chaque pixels
    Donc c'est un texte simple vue qu'il y a P2, et les dimensions ce serait 600 pixels de largeurs et 400 de hauteurs c'est ça ?

  4. #4
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Oui, donc, c'est du simple texte.

    Il va donc falloir ouvrir ce fichier en lecture et convertir les valeurs des pixels en entiers (c'est le plus gros du morceau).

    Donc déjà, charge ce fichier en lecture et utilise fichier.readlines() afin d'obtenir une liste des lignes du fichier, à toi de regarder ce que ça contient et identifier à partir de quel indice commence la ligne des pixels. Ensuite tu devras jouer avec str.split pour construire la liste des pixels, que tu devras parcourir ensuite afin de les convertir en eniers et appliquer le négatif.

    Voilà en gros ce qu'il faut faire, t'as du boulot ^^

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 26
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Ensuite tu devras jouer avec str.split pour construire la liste des pixels, que tu devras parcourir ensuite afin de les convertir en eniers et appliquer le négatif.
    Je ne comprend pas trop comment je dois construire la liste de pixels avec split
    Pour le reste voici ce que j'ai maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fichier=open("souris_p2.pgm","r") #ouverture du fichier en mode lecture
     
    lignes_fichier = fichier.readlines() #liste des lignes du fichier
     
    fichier.close()
     
    print(lignes_fichier[3]) #l'élément de rang 3 de la liste correspond à la 1ere ligne
                             #de pixels
     
    ligne1_de_pixel=lignes_fichier[3] #ligne1 est assigné à la première ligne de pixels
     
    ligne1_de_pixel.split #construire la liste de pixels
    Jusque là c'est bon ?

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par reborn1234 Voir le message
    Je ne comprend pas trop comment je dois construire la liste de pixels avec split
    Oui, désolé, j'étais encore resté sur ton précédent script de dégradé où tu avais plusieurs valeurs par ligne. Normalement la norme est d'avoir une valeur par ligne, ce qui facilite encore plus la tâche.

    Pour ouvrir ton fichier, et enregistrer les lignes dans une liste, le mieux est de faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open('souris_p2.pgm') as f :
        lignes_fichier = [line for line in f if line[0] != '#']
    Cela permet de ne pas stocker dans la liste les lignes d'éventuels commentaires du fichier.

    Tu as saisi comment récupérer les valeurs d'entête du fichier, et tu sais comment parcourir une liste, donc à partir de là, il est simple du'tiliser un range commencant à telle valeur, et pour son point d'arrêt, soit tu t'appuies sur la largeur × hauteur + point de départ, ou soit la longueur de la liste, ou encore plus simple en utilisant un slice sur la liste lignes_fichier[indice_de_depart_des_pixels:] et parcourir ces éléments.

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

Discussions similaires

  1. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  2. Réponses: 5
    Dernier message: 15/01/2005, 18h29
  3. commande c++ pour le traitement d'images
    Par mateo.14 dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2005, 10h46
  4. [lib] Traitement d'images
    Par Gogoye dans le forum Multimédia
    Réponses: 4
    Dernier message: 19/11/2004, 16h15
  5. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42

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