2016-04-07 14 views
2

Ich muss die Pixelfarbe eines Bildes in Python ändern. Außer dem Pixelwert (255, 0, 0) rot muss ich jeden Pixelfarbwert in Schwarz (0, 0, 0) ändern. Ich habe den folgenden Code ausprobiert, aber es hat nicht geholfen.Ändern der Pixelfarbe in PIL

from PIL import Image 
im = Image.open('A:\ex1.jpg') 
for pixel in im.getdata(): 
    if pixel == (255,0,0): 
     print "Red coloured pixel" 
    else: 
     pixel = [0, 0, 0] 
+0

Vorsicht mit Backslashes in String-Literalen. Benutze entweder rohe Zeichenketten 'r'A: \ ex1.jpg'' oder entkomme sie:' 'A: \\ ex1.jpg''. Oder benutze einfach Schrägstriche in Pfadnamen: ''A:/ex1.jpg'' –

Antwort

3

Sehen Sie diese Wikibook: https://en.wikibooks.org/wiki/Python_Imaging_Library/Editing_Pixels

diesen Code ändern, Ihr Problem zu passen:

pixels = img.load() # create the pixel map 

for i in range(img.size[0]): # for every pixel: 
    for j in range(img.size[1]): 
     if pixels[i,j] == (255, 0, 0): 
      pixels[i,j] = (0, 0 ,0) 
+1

Muss das OP nicht umgekehrt? (Ändern Sie stattdessen nicht rote Pixel in Schwarz)? – jsbueno

0

Hier ist die Art, wie ich PIL verwenden würde, zu tun, was Sie wollen:

from PIL import Image 

imagePath = 'A:\ex1.jpg' 
newImagePath = 'A:\ex2.jpg' 
im = Image.open(imagePath) 

def redOrBlack (im): 
    newimdata = [] 
    redcolor = (255,0,0) 
    blackcolor = (0,0,0) 
    for color in im.getdata(): 
     if color == redcolor: 
      newimdata.append(redcolor) 
     else: 
      newimdata.append(blackcolor) 
    newim = Image.new(im.mode,im.size) 
    newim.putdata(newimdata) 
    return newim 

redOrBlack(im).save(newImagePath) 
+0

Ich habe die fehlerhafte Zeile 'newim.putdata (newimdata)' bearbeitet. Ein Variablenname war falsch. Der Code funktioniert jetzt gut. – loxaxs