web-dev-qa-db-fra.com

Modification de la valeur de couleur de pixel dans PIL

J'ai besoin de changer la couleur de pixel d'une image en python. À l'exception de la valeur de pixel (255, 0, 0) rouge, je dois changer chaque valeur de couleur de pixel en noir (0, 0, 0). J'ai essayé le code suivant mais ça n'a pas aidé.

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]
5
Kuppo

Voir ce wikibook: https://fr.wikibooks.org/wiki/Python_Imaging_Library/Editing_Pixels

Modifier ce code pour l'adapter à votre problème:

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)
7
magni-

Voici comment j'utiliserais PIL pour faire ce que vous voulez:

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)
1
loxaxs

En prenant la question à un niveau extrême, voici comment modifier de manière aléatoire les canaux de la liste d’information personnelle (en négligeant les 0 que je considère comme étant de l’arrière-plan)

rr, gg, bb = in_img.split()
rr = rr.point(lambda p: 0 if p==0 else np.random.randint(256) )
gg = gg.point(lambda p: 0 if p==0 else np.random.randint(256) )
bb = bb.point(lambda p: 0 if p==0 else np.random.randint(256) )
out_img = Image.merge("RGB", (rr, gg, bb))
out_img.getextrema()
out_img.show()

Prendre plaisir!

0
innuendo