python imaging library pil n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Python Imaging Library (PIL) PowerPoint Presentation
Download Presentation
Python Imaging Library (PIL)

Loading in 2 Seconds...

play fullscreen
1 / 34

Python Imaging Library (PIL) - PowerPoint PPT Presentation


  • 323 Views
  • Uploaded on

Python Imaging Library (PIL). http://www.pythonware.com/products/pil/. Возможности PIL:. Групповая обработка изображений

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Python Imaging Library (PIL)' - angelo


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
python imaging library pil

Python Imaging Library (PIL)

http://www.pythonware.com/products/pil/

slide2
Возможности PIL:
  • Групповая обработка изображений

PIL идеально подходит для работы с группами изображений. С помощью PIL можно создавать превью, преобразовать изображения из одного формата в другой, распечатывать изображения и т.д.

  • Отображение изображений

Для отладки удобнее всего использовать метод im.show(). Открывает изображение в стандартном браузере.

PIL также может создавать объекты, с которыми работают различныемодули для создания GUI, такие как PythonWin, Tkinter, PyQT4

slide3

Возможности обработки изображений

        • Операции на пикселями, фильтры, преобразование цветового пространства
        • Изменение размера изображения, поворот, аффинные преобразования
        • Метод histogram, который может служить для автоматического улучшения контраста и извлечения статистических данных из изображения
slide4
Основные понятия
  • Размер (атрибут size)

Это кортеж, состоящий соответственно

из высоты и ширины в пикселях

  • Система координат

В Питоне используется Картезианская система координат с началом отсчета в левом верхнем углу.

Например, координаты прямоугольника 800х600 передаются как (0,0,800,600)

slide5
Основные понятия
  • Расширение файла (атрибут format)

Функция open узнает расширение из содержания файла, функция save использует название, чтобы определить формат (если он не указан конкретно)

  • Каналы (метод getbands)

Каждое изображение может состоять из одного или более каналов.

  • Цветовая модель (атрибут mode)

Определяет глубину и цвет пикселя

slide6
Основные понятия

Основные цветовые модели:

1(1-bit, ч/б)

L(8-bit pixels, ч/б)

P(8-bit pixels, пользовательская палитра)

RGB(3x8-bit pixels, естественный цвет – true color)

RGBA(4x8-bit pixels, естественный цвет с маской прозрачности)

CMYK(4x8-bit pixels, цветоделение)

YCbCr(3x8-bit pixels, цветной видеоформат)

slide7
Основные понятия
  • Палитра

Цветовая модельпалитра (“P”)использует цветовую палитру для определения фактического цвета каждого пикселя

  • Информация (атрибут info)

Изображению можно прикрепить дополнительную информацию. info - атрибут типа dictionary

  • Фильтры (NEAREST,BILINEAR,BICUBIC,ANTIALIAS)

Используются для операций, которые могут сопоставлять нескольким пикселям один.

slide8
Фильтры
  • NEAREST – выбирает ближайший пиксель из входного изображения и игнорирует все остальные (обычно идет по умолчанию во всех методах)
  • BILINEAR – использует линейную интерполяцию на области 2x2
  • BICUBIC – использует линейную интерполяцию на обл. 4x4
  • ANTIALIAS – вычисляет значение выходного пикселя с помощью высококачественного фильтра субдескретизации на всех пикселях, которые могут влиять на выходное значение. В текущей версии можно использовать только с методами resize и thumbnail
slide9
Чтение
  • Image.open(infile, mode)
  • im = Image.open(…) создает объект типа Image
  • Это ленивая операция, изначально считывается только информация, необходимая для декодирования изображения (цветовая модель, размер и т.д.)
  • mode – необязательный аргумент, если используется, должен быть “r”
  • infileможет быть строкой с путем файла или объектом типа файл(поддерживающим методы read, seek, tell), открытым в бинарном режиме
slide10
Чтение(Примеры)
  • Обычный случай
    • im = Image.open("lena.ppm")
  • Чтение из открытого файла
    • fp = open("lena.ppm", "rb")
    • im = Image.open(fp) #бинарный режим
  • Чтение из строки
    • import StringIO
    • im = Image.open(StringIO.StringIO(buffer))
  • Чтение из Tar-архива
    • import TarIO
    • fp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")
    • im = Image.open(fp)
slide11
Сохранение
  • im.save(outfile, format, options)
    • outfile– строка или файловый объект
    • format – формат файла, можно указывать в названии
    • options – дополнительные параметры
  • Определяет формат по названию или указанному формату
slide13
Пример
  • from PIL import Image
  • ein = Image.open("IMG_3090.jpg")#создаем объект класса Image
  • print ein.size, ein.mode, ein.format
  • # (512, 768) JPEG RGB
  • ein 1= ein.rotate(270, Image.BICUBIC, 1)
  • ein0 = ein.rotate(270, Image.BICUBIC)
  • ein0.save ("einstein0.JPEG")
  • ein1.save("einstein1.JPG")
slide14
Разница в наличии и отсутствии последнего аргумента

ein.rotate(270,Image.BICUBIC, 1)

ein.rotate(270,Image.BICUBIC)

slide16
Пример работы с каналами
  • import Image
  • im = Image.open('C:/panda.jpg')
  • r,g,b = im.split()
  • images = [Image.merge(im.mode, (r,b,g)),Image.merge(im.mode, (b,g,r)),Image.merge(im.mode, (g,b,r))]
  • defcreate_new(ls,ind):
  • w, h = images[0].size
  • n_ind = ind
  • bgr = Image.new("RGB",(w*(len(ls)) + n_ind*(len(ls)+1),h + n_ind*2),"white")
  • for iin images:
  • assert w, h == i.size
  • bgr.paste(i,(n_ind,ind))
  • n_ind += ind + w
  • return bgr
  • new_im = create_new(images,30)
  • new_im.show()
slide18
Конвертация изображенийв формат JPEG
  • importos,sys
  • import Image
  • forinfileinsys.argv[1:]:
  • f, e = os.path.splitext(infile)#f – имя, e – расширение файла
  • outfile = f + ".jpg"
  • ifinfile != outfile:# если формат изображения JPEG, то пропускаем его
  • try:
  • Image.open(infile).save(outfile)
  • except IOError:
  • print "cannot convert ", infile
slide19
Создание превью формата JPEG
  • importos, sys
  • import Image
  • size = 130, 130
  • forinfileinsys.argv[1:]:
  • outfile = os.path.splitext(infile)[0] + ".thumbnail"
  • if infile != outfile:
  • try:
  • im = Image.open(infile)
  • im.thumbnail(size,Image.ANTIALIAS)
  • im.save(outfile + ".jpg")
  • except IOError:
  • print "cannot create thumbnail for", infile
slide20
Обрезка, вставка
  • import Image
  • im = Image.open("C:/munch.jpg")
  • w, h = im.size
  • box = (300,400,700,h)
  • region = im.crop(box)
  • region = region.transpose(Image.ROTATE_180)
  • im.paste(region,box)
slide22
Работа с пикселями
  • import Image
  • im = Image.open("flower.jpg")
  • out = im.point(lambda i: i * 3) # увеличилась яркость
image
Обработка изображений (модуль Image)
  • import Image
  • im = Image.open('car.jpg')
  • im.convert("L").show()
  • # Используется матрица по умолчанию:
  • # L = R * 299/1000 + G * 587/1000 + B * 114/1000
  • можно использовать

im.convert(mode, matrix)

с собственной матрицей

преобразования matrix

imageenhance
Обработка изображений (ImageEnhance)
  • import ImageEnhance
  • enhancer = ImageEnhance.Contrast(im)
  • enhancer.enhance(1.3).show()
imageops
Обработка изображений (ImageOps)
  • import ImageOps
  • ImageOps.colorize(im, (44,36,12), (242,232,201)).show()
imagechops
Обработка изображений(ImageChops)
  • import ImageChops
  • p = Image.open('paper.jpg‘)
  • ImageChops.multiply(p, i m).show()
imagestat
Статистикаизображения (модуль ImageStat)
  • Позволяет узнать некоторые статистические данные изображения, такие как экстремальные значения пикселей, количество пикселей, среднее значение и т.д.
min max
Min и max изображения
  • import Image, ImageStat
  • defminmax(im):
  • stat = ImageStat.Stat(im) # Объект типа Stat
  • min, max = [], []
  • for band instat.extrema:#[(min1,max1),…,(minN,maxN)]
  • min.append(band[0])
  • max.append(band[1])
  • if len(stat.extrema) == 1:
  • return min[0], max[0]
  • else:
  • returntuple(min), tuple(max)
  • Image = Image.open(" lena.jpg“)
  • print minmax(image) # (52, 10, 0) (255, 237, 231)
  • print minmax(image.convert("L")) # 24 241
captcha pil
Создание CAPTCHA с помощью PIL
  • import Image,ImageDraw,ImageFont
  • import random
  • defcreate_captcha(charNum, fontSize):
  • #задаем список букв, из которых будем далее выбирать:
  • alphArr = ['A','B','C','D','E','F','G','H',
  • 'J','K','L','M','N','O','P','R','S','T',
  • 'W','X','Z','0','1','2','3','4','5','6','8']
  • font = ImageFont.truetype('ARIAL.TTF',fontSize)# создаем объект Font
  • width, height = font.getsize("W")#ширина и высота текста
  • interval = width
  • width, height = (width + 5)*charNum, height + 20#размеры фона
  • image = Image.new("RGB",(width,height), (192,192,192)) #создаем фон
  • draw = ImageDraw.Draw(image)#создаем из фона объект Draw, чтобы можно было рисовать на нем
captcha pil1
Создание CAPTCHA с помощью PIL
  • foriin range(0,charNum):
  • #создаем фон для буквы:
  • charImg = Image.new("RGB",(fontSize+10, fontSize+10),"black")
  • tmpDraw = ImageDraw.Draw(charImg)
  • #помещаем на фон случайную букву случайного цвета:
  • tmpDraw.text((3, 1), random.choice(alphArr),font = font,
  • fill = (random.randint(20,150), random.randint(20,140),random.randint(160,200)) )
  • charImg = charImg.rotate(random.randint(-30,30))
  • #создаем маску, чтобы фон буквы стал прозрачным:
  • mask = Image.new('L',(fontSize+10, fontSize+10),0)
  • mask.paste(charImg,(0,0))
  • hpos = 10 + (i*interval + random.randint(10,interval-10))
  • vpos = random.randint(10, 20)
  • image.paste(charImg,(hpos,vpos),mask) #два раза для лучшей видимости
  • image.paste(charImg,(hpos,vpos),mask)
captcha pil2
Создание CAPTCHA с помощью PIL
  • for iin range(0,random.randint(3,5)):
  • draw.line(
  • (random.randint(6,width-6),random.randint(3,height-3),
  • random.randint(6,width-6),random.randint(2,height-3)),
  • fill = (random.randint(70,150), random.randint(20,220),
  • random.randint(160,220)),
  • width = random.randint(1,2))
  • image.save(“captcha.jpg”)
  • create_captcha(7, 40)
slide34
Список Литературы
  • http://www.pythonware.com/library/pil/handbook/index.htm
  • http://blog.objectgraph.com/index.php/2007/01/19/pil-on-captcha-transparency-and-masking-for-captcha/