2013-09-22 19 views
5

Mi chiedevo come utilizzare Python Imaging Library per analizzare una semplice immagine bitmap (diciamo che la bitmap ha una spessa linea nera in alto) per dire al programma che la parte superiore dell'immagine è. Magari emettere un messaggio quando viene trovata la linea nera.Come analizzare l'immagine bitmap in python, usando PIL?

Qualsiasi codice di esempio sarebbe di grande aiuto.

+0

Ehi lì, ho aggiornato la mia risposta con qualche codice di esempio. Saluti! – pandita

risposta

8

È possibile convertire l'immagine in RGB che è (rosso, blu, verde). Ad esempio, avere un quadro da qui:

https://github.com/panditarevolution/PIL_Play/blob/master/blackline.jpg

import PIL 

# The conversion should work equally with a bitmap 
img = PIL.Image.open("blackline.jpg") 
rgb_im = img.convert('RGB') 

rgb_im.size 

Questo restituisce la dimensione in numero di pixel: (680,646). Puoi interrogare il colore dei singoli pixel con rgb_im.getpixel((x,y)) dove x diventa orizzontale e diventa verticale, da cima a fondo credo.

Quindi, per verificare se la prima linea è tutto nero (o per lo più nero), si potrebbe fare qualcosa di simile:

# Get the first row rgb values 
first_row = [rgb_im.getpixel((i,0)) for i in range(rgb_im.size[0])] 
# Count how many pixels are black. Note that jpg is not the cleanest of all file formats. 
# Hence converting to and from jpg usually comes with some losses, i.e. changes in pixel values. 
first_row.count((0,0,0)) # --> 628 
len(first_row) #--> 680 

628/680 = 92% dei pixel in prima fila sono neri.

Controlliamo tutti i colori che si verificano nella prima fila con set(first_row) che mi dà:

{(0, 0, 0), 
(0, 0, 2), 
(0, 1, 0), 
(1, 0, 0), 
(1, 1, 1), 
(2, 2, 0), 
(2, 2, 2), 
(4, 4, 2), 
(4, 4, 4), 
(5, 5, 3), 
(5, 7, 6), 
(6, 6, 4), 
(7, 7, 5), 
(14, 14, 12), 
(14, 14, 14), 
(35, 36, 31), 
(52, 53, 48), 
(53, 54, 46), 
(63, 64, 59), 
(64, 65, 60), 
(66, 67, 61), 
(68, 69, 61), 
(76, 77, 71), 
(79, 82, 65), 
(94, 96, 83), 
(96, 98, 87), 
(99, 101, 90), 
(101, 103, 92)} 

Quindi, anche se ci sono circa 8% dei pixel non neri, possiamo vedere che la maggior parte di questi sono piuttosto in bianco e nero, vale a dire sfumature di grigio; i valori di rgb sono abbastanza vicini tra loro per ciascun colore.

C'è un buon tutorial su PIL qui: http://effbot.org/imagingbook/

Una panoramica di base può essere trovato qui: http://infohost.nmt.edu/tcc/help/pubs/pil.pdf

Come bonus, e senza sapere se è buono o no (o se si copre PIL), c'è una bozza gratuita di "Programmazione Computer Vision con Python" disponibile qui: http://programmingcomputervision.com/

+0

Grazie mille, l'hai spiegato molto bene! – Unknowen

Problemi correlati