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 :

Créer une image a partir d'une liste de valeur RGB de pixels:


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut Créer une image a partir d'une liste de valeur RGB de pixels:
    Bonjour, dans le cadre d'un projet ISN, je dois créer un programme de stéganographie. On a déjà réussi a créer un bouton qui demande une image et ensuite un mot pour coder les lettres dans les valeurs RGB de cette image. Le problème c'est qu'une fois que l'on obtient une liste de valeur RGB aucun moyen de recréer l'image a partir de cette liste. J'ai donc besoin de votre aide pour trouver LA fonction qui arrangera tout nos problème. On a éssayé frombytes(), fromstring() et bien d'autre mais aucune ne marche....
    Merci d'avance !

  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
    Plutot que de chercher à tester toute les fonctions numpy, vous pourriez interroger google, qui vous aurait donné la réponse assez rapidemment : il vous faut une librairie de traitement d'image. Par exemple celle ci :

    https://he-arc.github.io/livre-python/pillow/index.html

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Plutot que de chercher à tester toute les fonctions numpy, vous pourriez interroger google, qui vous aurait donné la réponse assez rapidemment : il vous faut une librairie de traitement d'image. Par exemple celle ci :

    https://he-arc.github.io/livre-python/pillow/index.html
    Merci de votre réponse, je n’ai pas tester une seule fonction numpy mais celle de PIL je les ai presque toutes essayé et aucune n’as marché ^^.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Citation Envoyé par jairaume Voir le message
    mais celle de PIL je les ai presque toutes essayé et aucune n’as marché ^^.
    Si vous n'êtes pas arrivé à les faire fonctionner, c'est que vous ne les utilisez pas correctement. Et sans montrer ce que vous en faites, difficile de vous aider.

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

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Si besoin, j'ai fait des choses ici en deuxième année :
    http://obelix56.free.fr/spip.php?article55

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous n'êtes pas arrivé à les faire fonctionner, c'est que vous ne les utilisez pas correctement. Et sans montrer ce que vous en faites, difficile de vous aider.

    - W
    Re-bonjour désolé de la réponse tardive. Je suis nouveau sur le forum, voulez-vous le code complet ou uniquement la fonction qui pose problème ?

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Citation Envoyé par jairaume Voir le message
    voulez-vous le code complet ou uniquement la fonction qui pose problème ?
    Un minimum de code permettant de reproduire le problème.
    note: c'est un peu moins que tout le code et un peu plus que la seul fonction qui... voire complètement autre chose car on n'a peut être pas besoin d'avoir toute la fonction.

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

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    D'accord, donc le programme est un programme de stéganographie qui vise a cacher un mot dans une image. Après avoir transformé le mot en valeurs binaires correspondant à leur caractère asc2, on a divisé chaque nombre binaires en 3 groupe (3bit, 2 bit et 2bit). Ces groupes remplacent alors les 2 ou 3 derniers bits des valeur rouge de chaque pixels. Pour le caractère "a" par exemple, son code asc2 est 97 qui donne 1100001 en binaire. Ce nombre est découpé en 110 ; 00 et 01. Enfin la fonction place ces 2 ou 3 bits à la fin du nombre binaire de la valeur du pixel rouge. Ici il faudra 3 pixels pour coder le "a". (je ne sais pas si j'ai été clair et si c'est la bonne méthode à utiliser)
    Donc pour l'instant notre programme est presque terminé puisque nous obtenons une liste transformé de valeurs de pixel de cette forme :"[255,255,255]" qui contient le mot à coder. Cependant, pour ce qui est de transformer cette liste en image on a utilisé frombytes, fromstring, fromarray sans aucun succès. Pour obtenir une liste des valeurs des pixels nous avons utlisé getdata de PIL et maintenant nous séchons sur: Comment transformer cette liste en image ?.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    arry = array(l)
    imagetrans = Image.fromarray(arry)
    imagetrans.save("imagetransforme.png")
    En utilisant ceci on obtient une image de ligne verticale ce qui n'est pas exactement ce qu'on voudrait .
    J'espère avoir été clair et pas trop long ! Merci beaucoup d'avance si vous prenez de votre temps pour m'aider ^^.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par jairaume Voir le message
    je ne sais pas si j'ai été clair et si c'est la bonne méthode à utiliser
    Prendre une image et un texte puis encoder le texte dans les bits de poids faibles de l'image, c'est modifier un certain nombre de pixels de cette image puis la sauvegarder (et réaliser l'opération inverse pour récupérer le texte).

    Côté vocabulaire et algorithme, un peu de recherche sur Internet avec les mots clefs "steganographie methode lsb", vous sortirait des articles côté explications et exemple de code.

    Citation Envoyé par jairaume Voir le message
    En utilisant ceci on obtient une image de ligne verticale ce qui n'est pas exactement ce qu'on voudrait .
    Comment à partir d'une image a deux dimensions (une hauteur et une largeur) vous vous retrouvez avec un machin a une seule dimension?

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

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Comment à partir d'une image a deux dimensions (une hauteur et une largeur) vous vous retrouvez avec un machin a une seule dimension?

    - W
    C'est une bonne question voici l'image Nom : imagetransforme.png
Affichages : 1319
Taille : 8,4 Ko

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par jairaume Voir le message
    C'est une bonne question voici l'image
    Certes mais l'image d'arrivée doit ressembler à l'image de départ.... et entre l'image de départ et celle qu'on obtient à l'arrivée: il y a votre code.
    Passez un peu de temps à étudier l'algorithme avant de vous lancer à recoder quoi que ce soit. Cà on ne peut pas le faire à votre place.

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

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    As-tu regardé le mode d'images (RGB, ...) et sa taille ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    Au niveau du mode de l'image j'ai indiqué RGB mais par contre je ne sais ni où ni comment indiquer sa résolution/taille... sorry ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        arry = array(l)
        imagetrans = Image.fromarray(arry, mode='RGB')
        imagetrans.save("imagetransformee.png")
        imagetrans.show()
    Merci pour vos réponses

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Tu travailles avec PIL, je crois me souvenir ?
    Si oui, as-tu bossé le doc que je t'ai donnée en lien ?
    Il y a pas mal de choses à comprendre sur les images.
    Déjà, si tu es en Noir&Blanc ou en RGB, tu n'as pas la même structure de données.
    Ensuite, extraire les premiers pixels par exemple, cela permet de voir ce qui se passe.
    Il faut également les convertir en binaire.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Tu travailles avec PIL, je crois me souvenir ?
    Si oui, as-tu bossé le doc que je t'ai donnée en lien ?
    Il y a pas mal de choses à comprendre sur les images.
    Déjà, si tu es en Noir&Blanc ou en RGB, tu n'as pas la même structure de données.
    Ensuite, extraire les premiers pixels par exemple, cela permet de voir ce qui se passe.
    Il faut également les convertir en binaire.
    Oui j'ai essayé de regarder le doc sur le lien que vous avez posté. Cependant je n'ai pas trouvé de fonction qui converti le fichier en image. On m'as dit d’essayer avec image.open ou image.save en utilisant "wb" (write bits d'après ce que j'ai compris ^^) mais encore une fois je ne trouve aucune doc sur internet.
    J'ai peur d'avoir utilisé la mauvaise méthode (en récupérant et modifiant la liste d'une image) et de ne pas pouvoir ressortir une image de mon programme !!
    Je n'ai pas compris par contre (désolé) ce que vous avez dit concernant l'extraction des premiers pixel.
    Dois-je convertir toute les valeurs de ma liste RGB de pixels en binaire ?
    Merci

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par jairaume Voir le message
    J'ai peur d'avoir utilisé la mauvaise méthode (en récupérant et modifiant la liste d'une image) et de ne pas pouvoir ressortir une image de mon programme !!
    Vous devriez commencer par essayer de lire une image, remplacer la diagonale principale par des points noirs, puis la sauvegarder.
    Ce serait déjà une première étape... au sens où si vous n'arrivez même pas à faire çà, le reste étant plus compliqué...
    Et puis çà vous donnerait l'occasion de poster du code...

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

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    On peut commencer par là :
    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
    from PIL import Image
     
    mon_image = Image.open("cristaline.jpg")
    mon_image.show()
    # on récupère les dimensions de l'image
    largeur,hauteur = mon_image.size
    print(largeur, hauteur)
    # quelques pixels
    for i in range(10,15):
        for j in range(12,20):
            pixel = mon_image.getpixel((i,j))
            print(pixel)
    # on éclate l'image en trois (rouge vert bleu)
    red,green,blue=mon_image.split()
    # on transforme le rouge de l'image en liste
    rouge=list(red.getdata())
    print(rouge[30:45])

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/08/2015, 12h00
  2. [Python 2.X] Créer une liste à N valeurs
    Par Chacha1234 dans le forum Général Python
    Réponses: 5
    Dernier message: 21/01/2015, 10h41
  3. Comment créer une liste de valeur
    Par chawiken dans le forum IHM
    Réponses: 3
    Dernier message: 20/05/2008, 15h04
  4. Réponses: 3
    Dernier message: 17/08/2006, 11h30
  5. créer une liste de valeurs autorisées pour un champ
    Par elitol dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 01/06/2006, 17h37

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