2010-05-19 13 views
1

Je suis intéressé à apprendre comment inverser (faire une image négative) d'une image en utilisant le module python image libary.Inverser l'image en utilisant le module Python Image Library

Je ne peux cependant pas utiliser la fonction ImageOps 'inverser'. J'ai besoin d'une autre solution, en utilisant les valeurs RVB. J'ai cherché et essayé sans succès.

+0

Pourquoi «inverser» ne fonctionne pas pour vous? –

+0

* Ahem * c'est bien pour une mission d'être honnête (seulement une partie) et nous ne sommes pas autorisés à prendre la route 'facile' d'invert. J'ai déjà essayé et j'ai été rejeté. :(Apparemment, nous devons utiliser des boucles. – Gresham

Répondre

0

Il suffit de soustraire chaque valeur RVB de 255 (ou le maximum) pour obtenir les nouvelles valeurs RVB. this post vous indique comment obtenir les valeurs RBG à partir d'une image.

0

Une façon évidente consiste à utiliser Image.getpixel et Image.putpixel, pour RVB, chacun devrait être un tuple de trois entiers. Vous pouvez obtenir (255-r, 255-g, 255-b), puis le remettre.

Ou utilisez pix = Image.load(), ce qui semble plus rapide.

Ou si vous regardez dans ImageOps.py, il utilise une table de recherche (liste lut) pour mapper une image à une image inversée. Ou si cela ne va pas à l'encontre des règles de votre mission, vous pouvez utiliser Numpy. Ensuite, vous pouvez utiliser l'opération de matrice plus rapide.

0

Si vous travaillez avec le module media, vous pouvez le faire:

import media 
def invert(): 
    filename = media.choose_file() # opens a select file dialog 
    pic = media.load_picture(filename) # converts the picture file into a "picture" as recognized by the module. 
    for pixel in pic: 
     media.set_red(pixel, 255-media.get_red(pixel)) # the inverting algorithm as suggested by @Dingle 
     media.set_green(pixel, 255-media.get_green(pixel)) 
     media.set_blue(pixel, 255-media.get_blue(pixel)) 
print 'Done!' 

Le processus est similaire si vous utilisez le module picture, et ressemble à ceci:

import picture 
def invert(): 
    filename = picture.pick_a_file() # opens a select file dialog 
    pic = picture.make_picture(filename) # converts the picture file into a "picture" as recognized by the module. 
    for pixel in picture.get_pixels(pic): 
     picture.set_red(pixel, 255-picture.get_red(pixel)) # the inverting algorithm as suggested by @Dingle 
     picture.set_green(pixel, 255-picture.get_green(pixel)) 
     picture.set_blue(pixel, 255-picture.get_blue(pixel)) 
print 'Done!' 

Espérons que cela aide

Questions connexes