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

Programmation multimédia/Jeux Python Discussion :

Image en 256 couleurs (PIL)


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut Image en 256 couleurs (PIL)
    Bonjour,

    Je travaille sur un projet avec des Images PIL, et plus précisément leur équivalent en chaîne de bytes.
    Un petit exemple avec une capture de webcam comme image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import pygame.vidcap as vidcap
    import PIL.ImageTk as ImageTk
     
    def GetImage(cam) :
        buffer, width, height = cam.getbuffer()
        if buffer:
            return ImageTk.Image.fromstring('RGB', (width, height), buffer, 'raw', 'BGR', 0, -1)
     
    dev = vidcap.new_Dev(0,0)
    img = GetImage(dev)
    print('Dimension : ', img.size[0],' x ',img.size[1])
    bit=img.tobytes()
    print('Taille (octets) :',len(bit))#et c'est là que c'est intéressant
    En faisant ceci, j'obtiens :
    Dimension : 640 x 480
    Taille (octets) : 921600

    Or 640*480=307200. Je pourrais économiser près du tiers de sa taille en prenant des images en 256 couleurs, je me demandais si c'était possible. Si oui, avec quelle fonction ?

    Merci d'avance.
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Votre image est déjà "256 couleurs": vous avez demande un format "RGB" et vous avez bien 3 octets par pixel.

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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 43
    Points : 60
    Points
    60
    Par défaut
    Si je comprend bien, tu cherches à passer en 256 couleurs au lieu de 3*256 couleurs?

    J'ai regardé rapidement sur le net et j'ai trouvé ce bout de code qui pourrait t’intéresser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import pygame.vidcap as vidcap
    import PIL.ImageTk as ImageTk
     
    def GetImage(cam) :
        buffer, width, height = cam.getbuffer()
        if buffer:
            return ImageTk.Image.fromstring('RGB', (width, height), buffer, 'raw', 'BGR', 0, -1)
     
    dev = vidcap.new_Dev(0,0)
    img = GetImage(dev)
    print('Dimension : ', img.size[0],' x ',img.size[1])
    img = img.convert('RGB').convert('P', palette=Image.ADAPTIVE)
    bit=img.tobytes()
    print('Taille (octets) :',len(bit))

  4. #4
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Merci, ça a l'air de marcher mais quand j'essaye de l'afficher :
    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
    import pygame.vidcap as vidcap
    import PIL.ImageTk as ImageTk
    import PIL.Image as Image
    import tkinter as Tkinter
     
    def GetImage(cam) :
        buffer, width, height = cam.getbuffer()
        if buffer:
            return ImageTk.Image.fromstring('RGB', (width, height), buffer, 'raw', 'BGR', 0, -1)
     
    def changer(roen=None):
        c.delete(ref)
        f.title("après")
        image_def=ImageTk.PhotoImage(img2,(320*2,240*2),master=f)
        c.create_image(320*2/2+10,240*2/2+10,image=image_def)
     
    dev = vidcap.new_Dev(0,0)
    img = GetImage(dev)
    print('Dimension : ', img.size[0],' x ',img.size[1])
    bit=img.tobytes()
    print('Taille avant (octets) :',len(bit))
    img2 = img.convert('RGB').convert('P', palette=Image.ADAPTIVE)
    bit=img2.tobytes()
    print('Taille après (octets) :',len(bit))
     
    f=Tkinter.Tk()
    f.title('Avant')
     
    c=Tkinter.Canvas(f,bg='white',width=340*2,height=260*2)
    c.pack()
     
    image_def=ImageTk.PhotoImage(img,(320*2,240*2),master=f)
     
    ref=c.create_image(320+10,240+10,image=image_def)
     
    c.bind('<Button-1>',changer)
    f.mainloop()
    La première s'affiche correctement, mais la deuxième... comment faire pour l'afficher ?
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 43
    Points : 60
    Points
    60
    Par défaut
    Désolé je n'y connais déjà pas grand chose en python, alors niveau Tkinter... Ce que je vois c'est que quand j'appelle ta fonction "changer" le titre "f.title()" reste toujours "Avant" donc pour moi c'est ta fonction qui n'a pas été exécuté. Cela ne viendrait pas de ton utilisation de bind?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Ben, si, le nom de la fenêtre change bien lorsqu'on clique, en revanche cela affiche un écran tout blanc quand je veux afficher l'image obtenue. Mais ça doit être un problème dans la fonction car j'arrive à l'afficher, merci beaucoup. Mais le résultat du changement est... spécial, on dirait une aquarelle.
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  2. [Image]Dégradé de couleur
    Par eyal555 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/04/2005, 09h10
  3. [image] trouver les couleurs les plus présentes
    Par giminik dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 25/01/2005, 03h35
  4. Vitesse de transfert en mode VESA 800*600 256 couleurs
    Par chep dans le forum Assembleur
    Réponses: 9
    Dernier message: 28/05/2004, 11h53
  5. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28

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