Accélérer programme
agouard31
-
agouard31 -
agouard31 -
Bonjour,
Je souhaiterais accélérer ce programme permettant d'appliquer un effet "pop art" a une image.
En effet, le traitement est extrêmement long dès que l'image est assez grande (ex : tulipes de Windows)
Voici le programme :
Comment faire ??? Merci beaucoup de votre d'aide ;)
Je souhaiterais accélérer ce programme permettant d'appliquer un effet "pop art" a une image.
En effet, le traitement est extrêmement long dès que l'image est assez grande (ex : tulipes de Windows)
Voici le programme :
from PIL import Image path=input("veuillez entrer le chemin de l'image que vous souhaitez modifier") im =Image.open(path) im.show() larg,haut=im.size im2=Image.new("RGB",(larg,haut)) for x in range(larg): for y in range(haut): (r,v,b)=im.getpixel((x,y)) im2.putpixel((x,y),(r,0,0)) im2.save("im2.jpg") im3=Image.new("RGB",(larg,haut)) for x in range(larg): for y in range(haut): (r,v,b)=im.getpixel((x,y)) im3.putpixel((x,y),(0,v,0)) im3.save("im3.jpg") im4=Image.new("RGB",(larg,haut)) for x in range(larg): for y in range(haut): (r,v,b)=im.getpixel((x,y)) im4.putpixel((x,y),(0,0,b)) im4.save("im4.jpg") im5=Image.new("RGB",(larg,haut)) for x in range(larg): for y in range(haut): (r,v,b)=im.getpixel((x,y)) im5.putpixel((x,y),(r,v,0)) im5.save("im5.jpg") img_sortie=Image.new("RGB",(2*larg,2*haut)) for x in range(larg): for y in range(haut): img_sortie.putpixel((x,y),im2.getpixel((x,y))) for x in range(larg): for y in range(haut): img_sortie.putpixel((x+larg,y),im3.getpixel((x,y))) for x in range(larg): for y in range(haut): img_sortie.putpixel((x,y+haut),im4.getpixel((x,y))) for x in range(larg): for y in range(haut): img_sortie.putpixel((x+larg,y+haut),im5.getpixel((x,y))) img_sortie.show()
Comment faire ??? Merci beaucoup de votre d'aide ;)
A voir également:
- Accélérer programme
- Accelerer windows 10 - Guide
- Accelerer une video - Guide
- Programme demarrage windows - Guide
- Accélérer android - Guide
- Message programmé iphone - Guide
2 réponses
Alors là, comme code mal fichu, complètement inefficace, c'est champion
Bref ceci sera plus efficace, quoi que plus gourmand en mémoire.
Maintenant, quel est l'intérêt de créer les objets im2, ... , im5 dans la mesure où
DONC 3 tableaux suffiraient amplement et tu éviterais les appels à getpixel dans la seconde boucle. Je te laisse faire les modifications.
Exemple:
johand@bata:~/src/CCM/PYTHON/popart$ identify pink.jpeg
pink.jpeg JPEG 425x272 425x272+0+0 8-bit sRGB 21.2KB 0.000u 0:00.000
johand@bata:~/src/CCM/PYTHON/popart$ time python popart.py
real 0m2.967s
user 0m2.936s
sys 0m0.024s
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
- regroupe tes boucles concernant les différents plans
- quel est l'intérêt de sauvegarder l'image sur disque à chaque appel de la méthode putpixel Réalises-tu ce que ce la représente, même pour une image de faible taille ?
- idem pour la création de la sortie (pour laquelle tu ne fais même pas de copie en système de fichier ! un comble)
Bref ceci sera plus efficace, quoi que plus gourmand en mémoire.
from PIL import Image #path=input("veuillez entrer le chemin de l'image que vous souhaitez modifier") path="pink.jpeg" im =Image.open(path) im.show() larg,haut=im.size im2=Image.new("RGB",(larg,haut)) im3=Image.new("RGB",(larg,haut)) im4=Image.new("RGB",(larg,haut)) im5=Image.new("RGB",(larg,haut)) for x in range(larg): for y in range(haut): (r,v,b)=im.getpixel((x,y)) im2.putpixel((x,y),(r,0,0)) im3.putpixel((x,y),(0,v,0)) im4.putpixel((x,y),(0,0,b)) im5.putpixel((x,y),(r,v,0)) img_sortie=Image.new("RGB",(2*larg,2*haut)) for x in range(larg): for y in range(haut): img_sortie.putpixel((x,y),im2.getpixel((x,y))) img_sortie.putpixel((x+larg,y),im3.getpixel((x,y))) img_sortie.putpixel((x,y+haut),im4.getpixel((x,y))) img_sortie.putpixel((x+larg,y+haut),im5.getpixel((x,y))) img_sortie.save("POPOART.jpeg") img_sortie.show()
Maintenant, quel est l'intérêt de créer les objets im2, ... , im5 dans la mesure où
- un seul plan de couleur est significatf
- tu n'effectues (je peux me tromper sur tes intentions !) aucn export de ces objets.
DONC 3 tableaux suffiraient amplement et tu éviterais les appels à getpixel dans la seconde boucle. Je te laisse faire les modifications.
Exemple:
johand@bata:~/src/CCM/PYTHON/popart$ identify pink.jpeg
pink.jpeg JPEG 425x272 425x272+0+0 8-bit sRGB 21.2KB 0.000u 0:00.000
johand@bata:~/src/CCM/PYTHON/popart$ time python popart.py
real 0m2.967s
user 0m2.936s
sys 0m0.024s
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)