Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3309

Re: vitesse manipulation liste (generateur ?)

From Pierre Maurette <maurette.pierre@free.fr>
Newsgroups fr.comp.lang.python
Subject Re: vitesse manipulation liste (generateur ?)
Date 2020-03-27 17:36 +0100
Organization A noiseless patient Spider
Message-ID <mn.dc207e4317695ba7.79899@free.fr> (permalink)
References <slrnr7qfv1.ibk.lulu042@Minty.Rock-n-Roll.org>

Show all headers | View raw


Lulu :
> Bonjour,
>
> J'ai besoin de manipuler des listes rapidement pour manipuler une image.
> D'une liste ((r,v,b),(a,b,c),(x,y,z),.....), je veux passer à trois
> listes :
> ((r,0,0),(a,0,0),(x,0,0),....)
> ((0,v,0),(0,b,0),(0,y,0),....)
> ((0,0,b),(0,0,c),(0,0,z),....)
>
> Et je veux faire ça le plus rapidement possible.
> J'imagine que ça pourrait passer par un générateur, mais je ne sais pas
> comment en "fabriquer" et les exemples que je trouve sur le web ne
> m'aident pas vraiment. (plus essais infructueux).
>
>
> Mon code :
> 8<-----------8<---------8<----------8<----------8<----------8<----------8<
> #!/usr/bin/python3
> # -*- coding: utf-8 -*-
>
> from PIL import Image
>
> Fichier_Image = "Anna_et_Lulu.jpg"
>
> ze_image = Image.open( Fichier_Image ).convert("RGB")
> ze_image.show()
>
> (l, h) = ze_image.size
>
> # création de l'image rouge
> ze_image_rouge = Image.new("RGB",(l,h))
>
> # traitement pixel par pixel :
> for y in range(h):                  # pour y variant de 0 à h-1
>     for x in range(l):              # pour x variant de 0 à l-1
>         (rouge, vert, bleu) = ze_image.getpixel((x,y))
>         ze_image_rouge.putpixel((x,y), ( rouge, 0, 0))
>
> # création en mémoire de l'image rouge
> ze_image_rouge_fast = Image.new("RGB",(l,h))
>
> liste_pixels = list(ze_image.getdata())
> liste_pixels_rouges=[]
>
> for i in range(len(liste_pixels)):
>     liste_pixels_rouges.append((liste_pixels[i][0], 0, 0))
>
> ze_image_rouge_fast.putdata(liste_pixels_rouges)
>
> ze_image_rouge.show()
> ze_image_rouge_fast.show()
> 8<-----------8<---------8<----------8<----------8<----------8<----------8<
>
> Sur une image de 1.600.000 pixels, la première double boucle avec deux
> for imbriqués bricole pendant 7 secondes (pas très étonnant), mais la
> deuxième boucle qui remplit trois listes n'est que 4 fois plus rapide.
>
> Je crois que c'est en jouant sur ma manière de créer ces trois listes et
> de les remplir que je peux gagner le plus.
>
> Merci de vos avis

Fondamentalement une réponse est dans zip(*zipped).

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

RVBs = 
[(1,2,3),(11,12,13),(21,22,23),(31,32,33),(411,412,413),(521,522,523)]
print(RVBs)

(_rouge, _vert, _bleu) = list(zip(*RVBs))

im_rouge = [(x, 0, 0) for x in _rouge]
im_vert = [(0, x, 0) for x in _vert]
im_bleu = [(0, 0, x) for x in _bleu]

print(im_rouge)
print(im_vert)
print(im_bleu)

Remarques:

Avez-vous vraiment besoin d'une image "RVB" pour chaque channel ? 
Normalement un channel se représente dans une image "L".
Peut-être y a-t-il moyen de tout faire à partir de PIL (Image.split(), 
Image.getchannel(channel), et des fonctions de convertion ).

-- 
Pierre Maurette

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-27 00:50 +0100
  Re: vitesse manipulation liste (generateur ?) Nicolas <nicolasp@aaton.com> - 2020-03-27 13:12 +0100
    Re: vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-27 15:29 +0100
      Re: vitesse manipulation liste (generateur ?) Nicolas <nicolasp@aaton.com> - 2020-03-28 12:27 +0100
        Re: vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-28 18:08 +0100
          Re: vitesse manipulation liste (generateur ?) Nicolas <nicolasp@aaton.com> - 2020-03-28 21:38 +0100
  Re: vitesse manipulation liste (generateur ?) Pierre Maurette <maurette.pierre@free.fr> - 2020-03-27 17:36 +0100
    Re: vitesse manipulation liste (generateur ?) Pierre Maurette <maurette.pierre@free.fr> - 2020-03-27 17:38 +0100
      Re: vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-28 01:00 +0100
    Re: vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-28 00:57 +0100
      Re: vitesse manipulation liste (generateur ?) Nicolas <nicolasp@aaton.com> - 2020-03-28 12:12 +0100
        Re: vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-28 19:15 +0100
          Re: vitesse manipulation liste (generateur ?) Nicolas <nicolasp@aaton.com> - 2020-03-28 21:26 +0100
            Re: vitesse manipulation liste (generateur ?) Lulu <lulu042@fry.fr.invalid> - 2020-03-30 16:54 +0200
  Re: vitesse manipulation liste (generateur ?) ast <ast@invalid> - 2020-04-09 13:27 +0200

csiph-web