2013-09-22 3 views
5

Мне было интересно, как вы используете Python Imaging Library для анализа простого растрового изображения (скажем, у растрового изображения есть толстая черная линия вверху), чтобы сообщить программе, что верхняя часть изображения есть. Возможно, выводит сообщение, когда черная линия найдена.Как анализировать растровое изображение в python, используя PIL?

Любой пример кода будет полезной.

+0

Эй, я обновил свой ответ с помощью некоторого примера кода. Ура! – pandita

ответ

8

Вы можете преобразовать фотографию в rgb (красный, синий, зеленый). Например, получить картину здесь:

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 

Это возвращает размер в число пикселей: (680,646). Вы можете запросить цвет отдельных пикселей с помощью rgb_im.getpixel((x,y)), где x идет горизонтально и y идет вертикально, сверху вниз я верю.

Так, чтобы проверить первой линии, является ли все черные (или почти черный), вы могли бы сделать что-то вроде этого:

# 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% пикселей в первой строке черные.

Давайте проверим все встречающиеся цвета в первом ряду с set(first_row), который дает мне:

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

Таким образом, даже если есть около 8%, без черных точек, мы можем видеть, что большинство из них являются довольно монохромные, т.е. оттенки серого; значения rgb достаточно близки друг к другу для каждого цвета.

Существует хороший учебник по PIL здесь: http://effbot.org/imagingbook/

Базовый обзор можно найти здесь: http://infohost.nmt.edu/tcc/help/pubs/pil.pdf

В качестве бонуса, и, не зная, будет ли это хорошо или нет (или покрывает ли она PIL), имеется бесплатный проект «Программирование компьютерного зрения с помощью Python»: http://programmingcomputervision.com/

+0

Большое спасибо, вы очень хорошо это объяснили! – Unknowen

Смежные вопросы