presumo certi di acquistare una ER Per esempio ... TypeError: 'PixelAccess' object is not iterable
...?
Vedere la documentazione Image.load per come accedere pixel ..
In sostanza, per ottenere l'elenco di pixel in un'immagine, utilizzando PIL
:
from PIL import Image
i = Image.open("myfile.png")
pixels = i.load() # this is not a list, nor is it list()'able
width, height = i.size
all_pixels = []
for x in range(width):
for y in range(height):
cpixel = pixels[x, y]
all_pixels.append(cpixel)
che aggiunge ogni pixel al all_pixels
- se il file è un'immagine RGB (anche se contiene solo un'immagine in bianco e nero) si tratta di una tupla, ad esempio:
(255, 255, 255)
per convertire l'immagine di bianco e nero, è solo nella media dei tre valori - così, le ultime tre righe di codice diventerebbero ..
cpixel = pixels[x, y]
bw_value = int(round(sum(cpixel)/float(len(cpixel))))
# the above could probably be bw_value = sum(cpixel)/len(cpixel)
all_pixels.append(bw_value)
O per ottenere la luminanza (media ponderata):
cpixel = pixels[x, y]
luma = (0.3 * cpixel[0]) + (0.59 * cpixel[1]) + (0.11 * cpixel[2])
all_pixels.append(luma)
O puro 1-bit guardare in bianco e nero:
cpixel = pixels[x, y]
if round(sum(cpixel))/float(len(cpixel)) > 127:
all_pixels.append(255)
else:
all_pixels.append(0)
C'è probabilmente metodi all'interno PIL da fare tali RGB -> BW
conversioni più veloce, ma questo funziona, e non è partico particolarmente lento.
Se si desidera eseguire solo calcoli su ciascuna riga, è possibile saltare l'aggiunta di tutti i pixel a un elenco intermedio.Ad esempio, per calcolare il valore medio di ogni riga:
from PIL import Image
i = Image.open("myfile.png")
pixels = i.load() # this is not a list
width, height = i.size
row_averages = []
for y in range(height):
cur_row_ttl = 0
for x in range(width):
cur_pixel = pixels[x, y]
cur_pixel_mono = sum(cur_pixel)/len(cur_pixel)
cur_row_ttl += cur_pixel_mono
cur_row_avg = cur_row_ttl/width
row_averages.append(cur_row_avg)
print "Brighest row:",
print max(row_averages)
qual è la sua 'im'? – SilentGhost
Includere il messaggio che si ottiene quando si è arrestato in modo anomalo sarebbe davvero utile – dbr