2013-09-22 13 views
5

Zastanawiam się, w jaki sposób korzystasz z biblioteki Python Imaging Library do analizy prostego obrazu bitmapowego (powiedzmy, że mapa bitowa ma grubą czarną linię na górze), aby powiedzieć, że program jest górą obrazu. Może wypisać komunikat po znalezieniu czarnej linii.Jak analizować obraz bitmapowy w python, używając PIL?

Każdy przykładowy kod będzie bardzo pomocny.

+0

Hej tam, zaktualizowałem swoją odpowiedź za pomocą przykładowego kodu. Twoje zdrowie! – pandita

Odpowiedz

8

Można przekonwertować obrazek na rgb, który jest (czerwony, niebieski, zielony). Na przykład, uzyskać obraz stąd:

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 

ta zwraca rozmiar w liczbie pikseli: (680,646). Możesz zapytać o kolor pojedynczych pikseli za pomocą rgb_im.getpixel((x,y)), gdzie x idzie w poziomie i y idzie w pionie, od góry do dołu.

więc sprawdzić, czy pierwsza linia jest cały czarny (lub głównie czarny), można zrobić coś takiego:

# 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% punktów w pierwszym rzędzie są czarne.

Sprawdźmy wszystkie występujące kolory w pierwszym rzędzie z set(first_row) który daje mi:

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

Więc nawet jeśli istnieje około 8% bez czarnych pikseli, możemy zobaczyć, że większość z nich to monochromatyczne ładna, tj odcienie szarego; wartości rgb są dość blisko siebie dla każdego koloru.

Jest dobry tutorial PIL tutaj: http://effbot.org/imagingbook/

Podstawowy przegląd można znaleźć tutaj: http://infohost.nmt.edu/tcc/help/pubs/pil.pdf

Jako bonus, a nie wiedząc, czy to jest dobre czy nie (i czy obejmuje ona PIL), dostępny jest darmowy projekt "Programowanie Computer Vision with Python" dostępny tutaj: http://programmingcomputervision.com/

+0

Dziękuję bardzo, wyjaśniłeś to bardzo dobrze! – Unknowen

Powiązane problemy