web-dev-qa-db-fra.com

Comment changer les valeurs de pixel d'une image?

Je travaille sur un projet de traitement d'image et je suis débutant chez Python et j'utilise PIL. Toute aide serait appréciée.

Donc, ce que je fais, c'est que j'ai une image de l'espace avec des étoiles et du bruit. Ce que je veux faire, c'est ne garder que les pixels les plus lumineux et filtrer ceux qui sont ternes. Pour l’instant, c’est la première étape de ma tentative d’élimination du bruit ... Après avoir étudié les données de l’image, j’ai trouvé que les valeurs de 205 étaient fort probablement celles pour lesquelles je souhaite conserver le seuil.

Donc, ce que je fais dans le code est, ouvrez l'image et changez les valeurs de pixel contenant 205 en noir . Voici le code pour le même:

from PIL import Image
im = Image.open('nuvfits1.png')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = im.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
           pixelMap[i,j] = (0,0,0,255)
        pixelsNew[i,j] = pixelMap[i,j]
im.close()
img.show()       
img.save("out.tif") 
img.close()

Le problème est que l'image résultante n'est qu'un simple écran blanc. Qu'est ce que j'ai mal fait?

5
Manshi Sanghai

Le bloc if doit être suivi d'un bloc else afin que les pixels "normaux" qui ne répondent pas à vos critères conservent leurs valeurs d'origine.

from PIL import Image
im = Image.open('leaf.jpg')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
            pixelMap[i,j] = (0,0,0,255)
        else:
            pixelsNew[i,j] = pixelMap[i,j]
img.show()

Le code ci-dessus m'a donné les résultats suivants:

Image d'entrée

 Input

Image de sortie

 Output

6
essbee

Vous avez commis une erreur stupide. À la ligne 6, vous avez écrit pixelsNew = im.load () au lieu de pixelsNew = img.load() Cela devrait fonctionner maintenant.

from PIL import Image
im = Image.open('nuvfits1.png')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
           pixelMap[i,j] = (0,0,0,255)
        pixelsNew[i,j] = pixelMap[i,j]
im.close()
img.show()       
img.save("out.tif") 
img.close()
2
sidd607

Il faut en principe une nouvelle image avec le bruit supprimé, pixelNew . Ainsi, chaque fois que vous trouvez un tel cas dans pixelMap if 205 in pixelMap[i,j], définissez la valeur correspondante sur 0 en pixelsNew pixelNew[i,j] = (0, 0, 0, 255). Sinon, il suffit de copier la valeur en pixels de pixelMap pixelsNew[i,j] = pixelMap[i,j] 

from PIL import Image
im = Image.open('nuvfits1.png')
pixelMap = im.load()

img = Image.new( im.mode, im.size)
pixelsNew = img.load()
for i in range(img.size[0]):
    for j in range(img.size[1]):
        if 205 in pixelMap[i,j]:
            pixelsNew[i,j] = (0,0,0,255)
        else:
            pixelsNew[i,j] = pixelMap[i,j]
im.close()
img.show()       
img.save("out.tif") 
img.close()
1
Anjali