recorrer - Cómo analizar la imagen de mapa de bits en python, utilizando PIL?
mostrar una imagen en python (1)
Me preguntaba cómo usaría Python Imaging Library para analizar una imagen de mapa de bits simple (digamos que el mapa de bits tiene una gruesa línea negra en la parte superior) para indicarle al programa dónde estaba la parte superior de la imagen. Tal vez envíe un mensaje cuando se encuentre la línea negra.
Cualquier código de ejemplo sería de gran ayuda.
Puede convertir la imagen a rgb, que es (rojo, azul, verde). Por ejemplo, consigue una foto de aquí:
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
Esto devuelve el tamaño en número de píxeles: (680,646)
. Puedes consultar el color de los píxeles individuales con rgb_im.getpixel((x,y))
donde x
va horizontal y y
va vertical, de arriba a abajo, creo.
Entonces, para verificar si la primera línea es negra (o mayormente negra), podrías hacer algo como esto:
# 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% de los píxeles en la primera fila son negros.
Comprobemos todos los colores que ocurren en la primera fila con set(first_row)
que me da:
{(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)}
Entonces, incluso si hay alrededor del 8% de píxeles no negros, podemos ver que la mayoría de estos son bastante monocromáticos, es decir, tonos de gris; los valores de rgb son bastante cercanos entre sí para cada color.
Hay un buen tutorial sobre PIL aquí: http://effbot.org/imagingbook/
Puede encontrar una descripción general básica aquí: http://infohost.nmt.edu/tcc/help/pubs/pil.pdf
Como beneficio adicional, y sin saber si es bueno o no (o si cubre PIL), hay un borrador de "Programación de Visión por Computador con Python" disponible aquí: http://programmingcomputervision.com/