it-swarm.com.de

Wie kann man die Pixelwerte eines Bildes ändern?

Ich arbeite an einem Bildverarbeitungsprojekt und bin ein Anfänger bei Python und benutze PIL. Jede Hilfe wäre dankbar.

Was ich also mache, ist ein Raumbild mit Sternen und Rauschen. Was ich tun möchte, ist, nur die helleren Pixel zu behalten und die stumpfen herauszufiltern. Im Moment ist dies mein grundlegender Schritt beim Versuch, das Rauschen zu entfernen. Nach dem Studium der Bilddaten habe ich festgestellt, dass Werte von 205 möglicherweise die sind, an denen ich die Schwelle halten möchte.

Ich mache also im Code, öffne das Bild und ändere die Pixelwerte, die 205 enthalten, in schwarz . Hier ist der Code für dasselbe:

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

Das Problem ist, dass das resultierende Bild nur ein weißer Bildschirm ist. Was habe ich falsch gemacht?

5
Manshi Sanghai

Dem if-Block sollte ein else-Block folgen, damit "normale" Pixel, die Ihren Kriterien nicht entsprechen, ihre ursprünglichen Werte beibehalten.

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

Der obige Code ergab folgende Ergebnisse:

Eingabebild

 Input

Bild ausgeben

 Output

6
essbee

Du hast einen dummen Fehler gemacht. In Zeile 6 haben Sie pixelsNew = im.load () .__ geschrieben. Anstelle von pixelsNew = img.load().__ sollte dies jetzt funktionieren.

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

Grundsätzlich benötigen Sie ein neues Bild, bei dem das Rauschen entfernt wurde. Dies ist PixelNew . Wenn Sie also einen solchen Fall in PixelMap if 205 in pixelMap[i,j] finden, setzen Sie den entsprechenden Wert in PixelNew pixelNew[i,j] = (0, 0, 0, 255) auf 0. Kopieren Sie einfach den Pixelwert von 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