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]
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)
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)
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!