Cum se schimbă valorile pixelilor unei imagini? [duplicat] (Programare, Python, Procesarea Imaginilor, Gestionarea Erorilor, Bibliotecă De Imagistică Python, Pixel)

Manshi Sanghai a intrebat.

Lucrez la un proiect de procesare a imaginilor și sunt începător la Python și folosesc PIL. Orice ajutor ar fi apreciat.

Deci, ceea ce fac este că am o imagine a spațiului cu stele și zgomot. Ceea ce vreau să fac este să păstrez doar pixelii mai luminoși și să-i filtrez pe cei plictisitori. Deocamdată, acesta este pasul meu de bază în încercarea de a elimina zgomotul. după ce am studiat datele imaginii, am constatat că valorile de 205 sunt foarte posibil cele la care vreau să păstrez pragul.

Așadar, ceea ce fac în cod este să deschid imaginea și să schimb valorile pixelilor care conțin 205 în negru.Iată codul pentru același lucru:

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

Problema este că imaginea rezultată este doar un ecran alb. Ce am făcut greșit?

3 răspunsuri
essbee

Blocul if ar trebui să fie urmat de un bloc else, astfel încât pixelii „normali” care nu corespund criteriilor tale să își păstreze valorile originale.

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

Codul de mai sus mi-a dat următoarele rezultate:

Imagine de intrare

Imagine de ieșire

sidd607

Ați făcut o greșeală prostească. În linia 6 ați scrispixelsNew = im.load() în loc de pixelsNew = img.load()Acest lucru ar trebui să funcționeze acum.

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

Comentarii

  • Vă mulțumim pentru sugestie. Am făcut asta, dar acum obțin din nou aceeași imagine, nu o imagine editată. –  > Por Manshi Sanghai.
Anjali

Practic, aveți nevoie de o nouă imagine cu zgomotul eliminat, care este pixelsNew.So ori de câte ori găsiți un astfel de caz în pixelMap if 205 in pixelMap[i,j] atunci setați acea valoare corespunzătoare ca 0 în pixelsNew pixelNew[i,j] = (0, 0, 0, 255). Altfel, copiați valoarea pixelului din 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()

Comentarii

  • Ar trebui să vă explicați codul pe scurt… –  > Por Emipro Technologies Pvt. Ltd..
  • S-a făcut! Vă rugăm să verificați acum. –  > Por Anjali.