2017-08-14 7 views
1

J'essaie de créer un code pour convertir les valeurs RBG de pixels spécifiques dans une image. Voici le code que j'ai pour le moment:Conversion de valeurs rgb spécifiques

Je suis donc allé jusqu'à entrer de nouvelles valeurs RVB pour la nouvelle couleur du pixel, mais je suis perplexe quant à la façon de saisir réellement celles pour le pixel. Merci, toute aide est appréciée!

+0

Utiliser [ 'Image.putpixel()'] (http://pillow.readthedocs.io/en/4.2.x/reference/Image.html#PIL.Image.Image.putpixel). – martineau

+0

@martineau des idées pour formater des variables pour l'image.putpixel? Je rencontre des problèmes avec ça. Le code que j'ai ajouté au bas de la fonction ressemble à ceci: "" "original.putpixel ((coordonnées), (new_RGB))" "" "Ce qui devrait fonctionner, puisque le premier argument serait les deux coordonnées cartésiennes et le second l'argument serait les valeurs r, g, b, pas sûr pourquoi cela ne fonctionne pas .. – physicslifter

+0

Cela dépend du format de l'image ouverte.S'il est RVB, alors la valeur de couleur devrait être une séquence de trois _integers_, comme ' (10,2,4) 'not' "10,2,4" 'Les images en noir et blanc n'auraient besoin que d'une seule valeur entière (pas une séquence avec une seule chose) Cela signifie que vous ne pouvez pas utiliser le string la fonction 'input()' retourne.Vous devrez convertir la chaîne dans le format requis avant d'appeler 'putpixel()'. Il en est de même pour les coordonnées, sauf qu'elles auront toujours besoin d'être deux entiers valeurs représentant les positions x et y quel que soit le format de l'image – martineau

Répondre

1

Voici ce que j'ai trouvé.

from PIL import Image, ImageFilter 


print("enter image file:") 
myimage = input() 

try: 
    original = Image.open(myimage) 
    im = original.load() 
except: 
    print('Invalid file') 
    # print(myimage) 
    # print("The size of the Image is: ") 

print(original.format, original.size, original.mode) 

# pixel_values = list(original.getdata()) 

''' 
for y in range(0, 512): 
    row = "" 
for x in range(0, 512): 
    row = "" 
''' 

print("Enter coordinates of desired pixel in x,y form") 
coordinates = [int(x) for x in input().split(',')] 
x, y = coordinates 
R, G, B = im[x, y] 
print("R,G,B values corresponding with this pixel are:") 
print(R, G, B) 

print("enter new R,G,B values") 
new_RGB = [int(x) for x in input().split(',')] 

r, g, b = new_RGB 

im[x, y] = (r, g, b) 

original.save(myimage) 
+0

J'ai essayé ce code, et un problème est qu'il génère une erreur si les coordonnées x, y sont des valeurs inférieures (par exemple, j'ai utilisé 15,18 et cela a produit une erreur. y] = (r, g, b) est la voie à suivre par opposition à l'image.putpixel? Parce que j'ai lutté avec ce dernier.Je vais jouer avec le premier un peu et voir si je peux le faire fonctionner – physicslifter

+0

Il travaille pour moi avec (15,18) pouvez-vous poster le code d'erreur? –

+0

Merci! Je l'ai eu à travailler – physicslifter