Библиотека изображений python — python imaging library
Содержание:
- Использование OCR
- SciPy
- Displaying image in Tkinter
- Что мы еще не сделали
- Pillow blur image
- Pillow show image
- Конвертирование из JPG в PNG пример Pillow
- Использование библиотеки PIL в Python
- Другие параметры PyTesseract
- Reading image from URL
- Introduction
- Scikit-Image
- Что мы будем использовать?
- ImageFont — Пишем текст на изображение используя Pillow
- Как настроить?
- The ImageColor Module
- Функции
- Создание рисунка в Pillow
- Обрезка изображений через Pillow (crop)
- Получение информации об изображении через Pillow
- The ImageChops Module
Использование OCR
Раньше оцифровка документов осуществлялась путем ручного набора текста на компьютере. Благодаря OCR этот процесс упрощается, поскольку документ можно сканировать, обрабатывать, а текст извлекать и сохранять в редактируемой форме, например в текстовом документе.
Если у вас есть сканер документов на вашем телефоне, например Adobe Scan, вы, вероятно, сталкивались с использованием технологии OCR.
Аэропорты также могут использовать OCR для автоматизации процесса распознавания паспортов и извлечения из них информации.
Другие варианты использования OCR включают автоматизацию процессов ввода данных, обнаружения и распознавания автомобильных номеров.
SciPy
SciPy is primarily used for mathematical and scientific computations, but sometimes it can also be used for basic image manipulation and processing tasks using the submodule .At the end of the day, images are just multidimensional arrays, SciPy provides a set of functions that are used to operate n-dimensional Numpy operations. SciPy provides some basic image processing operations such as Face Detection, Convolution, Image Segmentation, Reading Images, Feature Extraction, and many more. Along with this, you also perform filtering, draw contour lines on images.
Check the below code for Blurring an image with SciPy:
from scipy import ndimage, misc from matplotlib import pyplot as plt f = misc.face() b_face = ndimage.gaussian_filter(f, sigma=3) figure, axis = plt.subplots(1, 2, figsize=(16, 8))
For more information, check official documentation: Link
Displaying image in Tkinter
The following program displays an image in a Tkinter
program.
show_tkinter.py
#!/usr/bin/python from PIL import Image, ImageTk from tkinter import Tk from tkinter.ttk import Frame, Label import sys class Example(Frame): def __init__(self): super().__init__() self.loadImage() self.initUI() def loadImage(self): try: self.img = Image.open("tatrs.jpg") except IOError: print("Unable to load image") sys.exit(1) def initUI(self): self.master.title("Label") tatras = ImageTk.PhotoImage(self.img) label = Label(self, image=tatras) # reference must be stored label.image = tatras label.pack() self.pack() def setGeometry(self): w, h = self.img.size self.master.geometry(("%dx%d+300+300") % (w, h)) def main(): root = Tk() ex = Example() ex.setGeometry() root.mainloop() if __name__ == '__main__': main()
The program displays an image in the widget
of the Tkinter toolkit.
from PIL import Image, ImageTk
The is a Tkinter-compatible photo image.
It can be used everywhere Tkinter expects an image object.
tatras = ImageTk.PhotoImage(self.img)
We create a photo image.
label = Label(self, image=tatras)
The photoimage is given to the parameter of the
label widget.
label.image = tatras
In order not to be garbage collected, the image reference must be
stored.
w, h = self.img.size self.master.geometry(("%dx%d+300+300") % (w, h))
The size of the window fits the image size.
Что мы еще не сделали
Мы многого достигли в этом посте, но еще многое предстоит сделать, чтобы усовершенствовать наш проект и подготовить его к работе в реальном мире. Во-первых, мы можем добавить стиль нашему сайту и сделать его более привлекательным для конечного пользователя с помощью CSS. Мы также можем добавить возможность загрузки и сканирования нескольких изображений одновременно и одновременного отображения.
Браузер позволяет нам подключаться к камере машины и снимать изображения, разумеется, с разрешения пользователя. Это может быть очень полезным, особенно на мобильных устройствах. Вместо того, чтобы пользователю приходилось снимать и сохранять изображение, а затем загружать его на веб-сайт, если мы добавим функцию камеры, мы можем позволить пользователю выполнять операции непосредственно из веб-приложения Flask. Это ускорит процесс сканирования.
Вы также можете создать инструмент CLI. Он позволит вам запустить команду, включая местоположение изображения, а затем распечатать вывод сканера на ваш терминал или отправить его в базу данных или API. Если вы выбрали этот путь, Docopt – фантастический инструмент для создания инструментов командной строки с использованием Python.
Pillow blur image
The module contains definitions for a pre-defined
set of filters, which can be used with the method.
blur_image.py
#!/usr/bin/python from PIL import Image, ImageFilter import sys try: img = Image.open("tatras.jpg") except IOError: print("Unable to load image") sys.exit(1) blurred = img.filter(ImageFilter.BLUR) blurred.save("blurred.png")
The program loads an image, creates a blurred image from the original
image, and saves the new image on disk.
from PIL import Image, ImageFilter
We import the and modules.
blurred = img.filter(ImageFilter.BLUR)
We apply the on the original image;
the operation returns a new modified image.
blurred.save("blurred.png")
With the method, we save the blurred image on
disk.
Pillow show image
In the first example we read an image file and show it in an external program.
show_image.py
#!/usr/bin/python from PIL import Image import sys try: tatras = Image.open("tatras.jpg") except IOError: print("Unable to load image") sys.exit(1) tatras.show()
The program reads a JPG image and displays it in an external application.
from PIL import Image
From the PIL module, we include the class.
tatras = Image.open("tatras.jpg")
The method reads the image file. Pillow can read
over 30 different file formats.
tatras.show()
The method is mainly intended for debugging purposes.
It saves the image into a temporary file and displays it in external program.
This could be ImageMagic on Linux or Paint on Windows.
Конвертирование из JPG в PNG пример Pillow
В Python Pillow метод позволяет конвертировать изображение в другой формат.
Python
from PIL import Image
import sys
try:
tatras = Image.open(«tatras.jpg»)
except IOError:
print(«Unable to load image»)
sys.exit(1)
tatras.save(‘tatras.png’, ‘png’)
1 2 3 4 5 6 7 8 9 10 |
fromPIL importImage importsys try tatras=Image.open(«tatras.jpg») exceptIOError print(«Unable to load image») sys.exit(1) tatras.save(‘tatras.png’,’png’) |
Программа считывает изображение JPG и конвертирует его в PNG формат. Это делает в следующей строчке:
Python
tatras.save(‘tatras.png’, ‘png’)
1 | tatras.save(‘tatras.png’,’png’) |
Второй параметр метода нужен для уточнения итогового формата изображения.
Использование библиотеки PIL в Python
http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги: python PIL
Откройте окно DOS и установите библиотеку:
Исходное изображение:
Очевидно, что картина немного большая, давайте ее укоротим:
После этого мы все работаем над beauty.jpg
Сохранить как PNG:
Превратись в старые черно-белые фотографии:
Измените цветовой канал изображения:
Нам часто приходится участвовать в волне нечетких операций, притворяясь:
Получить ее схему легко:
Наконец, увеличьте контраст в 5 раз по сравнению с начальным:
\
В библиотеке PIL так много модулей, усердно учитесь, будущее страны зависит от вас
Image | ImageChops | ImageColor | ImageCrackCode | ImageDraw |
---|---|---|---|---|
ImageEnhance | ImageFile | ImageFileIO | ImageFilter | ImageFont |
ImageGL | ImageGrab | Imagemath | ImageOps | ImagePalette |
ImagePath | ImageQt | ImageSequence | ImageStat | ImageTk |
ImageWin |
Интеллектуальная рекомендация
Наша страна — большая страна с далеко зашедшей винной культурой. Еще во времена династии Сун мы варили вкусные и мягкие спиртные напитки. Мы часто слышим, как старшие поколения говорят, что с возрасто…
1. Предположим, что вы tomcat6 и добавили библиотеку драйверов mysql в D: \ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ lib 2. Добавьте в «Tomcat 6.0 \ conf \ context.xml&ra…
…
4. Условное суждение После выполнения условного тестового выражения обычно возвращается «истина» или «ложь», так же как возвращаемое значение после выполнения команды равно 0 д…
1. Что такое куча? Стек: особый видПолное двоичное деревоструктура. Большая корневая куча: полное двоичное дерево, удовлетворяющее тому, что любой узел больше, чем его дочерний узел.Большой; Неболь…
Вам также может понравиться
1. Введение Аполлон (Аполлон) — это НИОКР в Ctrip Framework SectorРаспределенный Центр конфигурацииМожно централизовать управление для управления различными средами, разными кластерами. После настройк…
…
Список может быть изменен, но иногда вам необходимо создать серию немодифицируемых элементов, а кортеж может удовлетворить эти потребности. Значение, которое не может быть изменено в Python, называетс…
тема: код показан ниже: Ожидание является обратной величиной вероятности. Накопите все ожидаемые значения, чтобы получить: N + N / 2 +… + 1, и положите N, чтобы получить: N (1 + 1/2 +… +…
1. Ролевое управление фоновым менеджментом 1.1 Определение ролевой формы для управления ролями Определите форму роли в файле forms.py в каталоге администратора приложения. 1.2 Список всех ролей в упра…
Другие параметры PyTesseract
У Python-Tesseract есть больше возможностей, которые вы можете изучить. Например, вы можете указать язык с помощью флага lang:
pytesseract.image_to_string(Image.open(filename), lang='fra')
Это результат сканирования изображения без lang:
А теперь с lang:
Платформа также оптимизирована для лучшего определения языков, как показано на снимках экрана.
Без flag lang скрипт пропустил некоторые французские слова, но после введения flag он смог обнаружить весь французский контент. Перевод невозможен, но все равно впечатляет. Официальная документация Tesseract включает в себя поддерживаемые языки в этом разделе.
Ориентация и обнаружение скриптов также входят в число возможностей PyTesseract, и это помогает в обнаружении используемых шрифтов и ориентации текста на данном изображении. Если мы можем сослаться на рукописное изображение, которое мы скачали ранее:
print(pytesseract.image_to_osd(Image.open('downloaded_handwritten.png')))
На изображении не было информации о номере страницы, поэтому это не было обнаружено. Движок Tesseract способен извлекать информацию об ориентации текста на изображении и повороте. Уверенность в ориентации – это показатель уверенности двигателя в обнаруженной ориентации, которая действует как ориентир, а также показывает, что она не всегда на 100% точна. Раздел скрипта обозначает систему письма, используемую в тексте, и за ним также следует маркер уверенности.
Если бы мы следили за распознанными символами и их границами боксов, PyTesseract добивается этого с помощью pytesseract.image_to_boxes (Image.open (‘loaded_handwritten.png’)).
Это некоторые из возможностей PyTesseract среди других, такие как преобразование извлеченного текста в PDF-файл с возможностью поиска или вывод HOCR.
Reading image from URL
The next example reads an image from URL.
read_from_url.py
#!/usr/bin/python from PIL import Image import requests import sys url = 'https://i.ytimg.com/vi/vEYsdh6uiS4/maxresdefault.jpg' try: resp = requests.get(url, stream=True).raw except requests.exceptions.RequestException as e: sys.exit(1) try: img = Image.open(resp) except IOError: print("Unable to open image") sys.exit(1) img.save('sid.jpg', 'jpeg')
The example reads an image from the URL and saves it on
disk.
import requests
We use the library to download the image.
resp = requests.get(url, stream=True).raw
We read the image as raw data.
img = Image.open(resp)
is created from the response object.
img.save('sid.jpg', 'jpeg')
The image is saved.
Introduction
As indicated by IDC, digital information will soar up to 175 zettabytes, and the immense piece of this information pictures. Data scientists need to (pre) measure these images before taking care of them into any Artificial Intelligence and deep learning models. They need to do the significant (and at times filthy) work before the pleasant part starts.
To handle a lot of information with effectiveness and speed without bargaining the outcomes Data scientists need to utilize picture preparing instruments for Artificial Intelligence and deep learning tasks.
In this article, I will drill down the most helpful image processing libraries in Python which are being utilized vigorously in Artificial intelligence and deep learning tasks. So let’s get started!
Scikit-Image
Scikit-Image is another great open-source image processing library. It is useful in almost any computer vision task. It is among one of the most simple and straightforward libraries. Some parts of this library are written in Cython ( It is a superset of python programming language designed to make python faster as C language). It provides a large number of algorithms which include segmentation, color space manipulation, geometric transformation, filtering, morphology, feature detection, and many more.
Scikit Image uses Numpy arrays as image objects. Let’s see how can we perform active contour operation in the scikit image. Active contour describes the boundaries of shapes in an image.
Check the below code for active contour operation:
import numpy as np import matplotlib.pyplot as plt from skimage.color import rgb2gray from skimage import data from skimage.filters import gaussian from skimage.segmentation import active_contour image = data.astronaut() # Data for circular boundary s = np.linspace(0, 2*np.pi, 400) x = 220 + 100*np.cos(s) y = 100 + 100*np.sin(s) init = np.array().T # formation of the active contour centre = active_contour(gaussian(image, 3),init, alpha=0.015, beta=10, gamma=0.001) figure, axis = plt.subplots(1, 2, figsize=(7, 7)) ax.imshow(image, cmap=plt.cm.gray) ax.set_title("Original Image") ax.imshow(image, cmap=plt.cm.gray)
For more information, check official documentation: Link
Что мы будем использовать?
Для этого проекта OCR мы будем использовать библиотеку Python-Tesseract или просто PyTesseract, которая является оболочкой для Google Tesseract-OCR Engine.
Я выбрал его, потому что он полностью открыт и разрабатывается и поддерживается Google. Следуйте этим инструкциям, чтобы установить Tesseract на свой компьютер, поскольку от него зависит PyTesseract.
Мы также будем использовать веб-фреймворк Flask для создания нашего простого OCR-сервера, на котором мы можем делать снимки через веб-камеру или загружать фотографии для распознавания символов.
Мы также собираемся использовать Pipenv, поскольку он также выполняет настройку виртуальной среды и управление требованиями.
Помимо этого, мы также будем использовать библиотеку Pillow, которая является ответвлением Python Imaging Library (PIL) для обработки открытия и обработки изображений во многих форматах.
В этом посте мы сконцентрируемся на PyTesseract, хотя есть и другие библиотеки Python, которые могут помочь вам извлекать текст из изображений, например:
- Textract: который может извлекать данные из PDF-файлов, но является тяжелым пакетом.
- Pyocr: предлагает больше вариантов обнаружения, таких как предложения, цифры или слова.
ImageFont — Пишем текст на изображение используя Pillow
В следующем коде показано, как в Python можно написать текст на изображении с помощью Pillow.
На сайте есть отдельная статья по нанесению водяного знака на изображение:
- Как ставить водяные знаки на изображениях при помощи Python
Python
from PIL import Image, ImageDraw, ImageFont
import sys
try:
tatras = Image.open(«tatras.jpg»)
except:
print(«Unable to load image»)
sys.exit(1)
idraw = ImageDraw.Draw(tatras)
text = «High Tatras»
font = ImageFont.truetype(«arial.ttf», size=18)
idraw.text((10, 10), text, font=font)
tatras.save(‘tatras_watermarked.png’)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
fromPIL importImage,ImageDraw,ImageFont importsys try tatras=Image.open(«tatras.jpg») except print(«Unable to load image») sys.exit(1) idraw=ImageDraw.Draw(tatras) text=»High Tatras» font=ImageFont.truetype(«arial.ttf»,size=18) idraw.text((10,10),text,font=font) tatras.save(‘tatras_watermarked.png’) |
Для создания рисунка используется модуль .
Python
font = ImageFont.truetype(«arial.ttf», size=18)
1 | font=ImageFont.truetype(«arial.ttf»,size=18) |
Создается шрифт Arial с размером 18.
Python
idraw.text((10, 10), text, font=font)
1 | idraw.text((10,10),text,font=font) |
Сам текст наносится через метод . По умолчанию цвет шрифта белый.
Как настроить?
Начните с установки Pipenv, используя следующую команду через Pip (если вам нужно настроить его, обратитесь к этому).
$ pip install pipenv
Создайте каталог проекта и запустите проект, выполнив следующую команду:
$ mkdir ocr_server cd ocr_server pipenv install --three
Теперь мы можем активировать нашу виртуальную среду и начать установку наших зависимостей:
$ pipenv shell $ pipenv install pytesseract Pillow
Если вы не будете использовать Pipenv, вы всегда можете использовать подход Pip и Virtual Environment. Следуйте официальной документации, которая поможет вам начать работу с Pip и виртуальной средой:
Примечание. В этом случае вместо pipenv install Pillow будет команда pip install Pillow.
The ImageColor Module
Модуль ImageColor содержит функции для преобразования строки определяющую цвет в RGB кортеж. Этот модуль используется в Image.new и ImageDraw модуле.
Модуль ImageColor поддерживает следующие форматы строк:
- Шестнадцатеричные спецификаторы цвета, вида «#RGB» или «#RRGGBB». Например, «# ff0000»;
- RGB функции, вида «rgb(красный, зеленый, синий)». Например, «rgb(255,0,0)» и «rgb(100%, 0%, 0%)»;
- HSL функций (Тон-Насыщенность-Яркость) заданных в качестве «HSL (тон, насыщенность%, яркость%)», где тон цвета дается как угол между 0 и 360, насыщение значения между 0% и 100%, и яркость это значение от 0% до 100. Например, «hsl(0,100%, 50%)»;
- HTML названия цветов. Модуль ImageColor поддерживает около 140 стандартных названий цветов. Например «red» или «white».
Функции
loadImageFont.load(file) => объект шрифта
Загружает шрифт из указанного файла, и возвращает соответствующий объект шрифта.
load_pathImageFont.load_path(file) => объект шрифта
То же, что функция load, но ищет файл вместе c sys.path, если он не найден в текущем каталоге.
truetypeImageFont.truetype(file, size) => объект шрифта
Загружает TrueType или OpenType файл шрифта и создаёт объект со шрифтом заданного размера.
ImageFont.truetype(file, size, encoding=value) => объект шрифта
Загружает TrueType или OpenType файл шрифта и создаёт объект со шрифтом заданного размера. И задаёт кодировку: «UNIC» (Unicode), «Symb» (Microsoft Symbol), «ADOB» (Adobe Standard), «ADBE» (Adobe Expert), и «armn» (Apple Roman).
load_defaultImageFont.load_default() => объект шрифта
Загружает шрифт по умолчанию.
Создание рисунка в Pillow
У Pillow есть базовые возможности для создания 2D графики. Модуль предоставляет простую 2D графику для объектов . Мы можем создавать новые изображения, аннотации к ним, ретушировать существующие фото, а также сразу генерировать графику для веб.
Python
from PIL import Image, ImageDraw
# Создаем белый квадрат
img = Image.new(‘RGBA’, (200, 200), ‘white’)
idraw = ImageDraw.Draw(img)
idraw.rectangle((10, 10, 100, 100), fill=’blue’)
img.save(‘rectangle.png’)
1 2 3 4 5 6 7 8 9 |
fromPIL importImage,ImageDraw img=Image.new(‘RGBA’,(200,200),’white’) idraw=ImageDraw.Draw(img) idraw.rectangle((10,10,100,100),fill=’blue’) img.save(‘rectangle.png’) |
В примере создается новое изображение, на котором нарисован голубой прямоугольник поверх белого фона.
Python
img = Image.new(‘RGBA’, (200, 200), ‘white’)
1 | img=Image.new(‘RGBA’,(200,200),’white’) |
Создается новое изображение, у которого режим «RGBA», размер 200х200 и белый фон.
Python
idraw = ImageDraw.Draw(img)
1 | idraw=ImageDraw.Draw(img) |
Из картинки создается объект . Теперь на нем можно что-то нарисовать.
Python
idraw.rectangle((10, 10, 100, 100), fill=’blue’)
1 | idraw.rectangle((10,10,100,100),fill=’blue’) |
С помощью метода на площади созданного изображения мы нарисовали голубой прямоугольник.
Обрезка изображений через Pillow (crop)
Pillow также можно использовать для обрезки изображения. Это довольно легкий процесс, хотя он постигается методом проб и ошибок. Попробуем обрезать нашу картинку с медузой через :
Python
from PIL import Image
image = Image.open(‘jelly.jpg’)
cropped = image.crop((0, 80, 200, 400))
cropped.save(‘/path/to/photos/cropped_jelly.png’)
1 2 3 4 5 |
fromPIL importImage image=Image.open(‘jelly.jpg’) cropped=image.crop((,80,200,400)) cropped.save(‘/path/to/photos/cropped_jelly.png’) |
Обратите внимание, здесь просто нужно открыть изображение, после чего вызвать метод. Потребуется передать координаты того, что нужно обрезать, например
В Pillow пиксель 0 является верхним левым уровнем. С увеличением значения идет смещение вправо. С увеличением значения идет смещение вниз. После запуска вышеуказанного кода будет получено следующее изображение:
Довольно унылый результат. Я ведь хотел получить «голову» медузы. Для быстрого получения правильных координат можно использовать Gimp или Photoshop. Он поможет определить координаты для следующего обрезания.
Python
from PIL import Image
image = Image.open(‘jelly.jpg’)
cropped = image.crop((177, 882, 1179, 1707))
cropped.save(‘/path/to/photos/cropped_jelly2.png’)
1 2 3 4 5 |
fromPIL importImage image=Image.open(‘jelly.jpg’) cropped=image.crop((177,882,1179,1707)) cropped.save(‘/path/to/photos/cropped_jelly2.png’) |
При запуске кода результатом станет следующее обрезанное изображение:
Намного лучше!
Программа обрезает картинку, после чего новая версия сохраняется на диск. Метод принимает кортерж с четырьмя элементами, которые представляют координаты пикселей (левый верхний, правый верхний, левый нижний, правый нижний).
Получение информации об изображении через Pillow
С помощью Pillow также можно получить подробную информацию об изображении. Рассмотрим небольшой пример:
Python
>>> from PIL import Image
>>> image = Image.open(‘jelly.jpg’)
>>> r, g, b = image.split()
>>> histogram = image.histogram()
>>> exif = image._getexif()
exif
{256: 1935,
257: 3411,
271: u’Panasonic’,
272: u’DMC-LX7′,
274: 1,
282: (180, 1),
283: (180, 1),
296: 2,
305: u’PaintShop Pro 14.00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00′,
306: u’2016:08:21 07:54:57′,
36867: u’2016:08:21 07:54:57′,
36868: u’2016:08:21 07:54:57′,
37121: ‘\x01\x02\x03\x00’,
37122: (4, 1),
37381: (124, 128),
37383: 5,
37384: 0,
37385: 16,
37386: (47, 10),
40960: ‘0100’,
40961: 1,
40962: 3968,
40963: 2232,
41495: 2,
41728: ‘\x03’,
41729: ‘\x01’,
41985: 0,
41986: 0,
41987: 0,
41988: (0, 10),
41989: 24,
41990: 0,
41991: 0,
41992: 0,
41993: 0,
41994: 0}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
>>>fromPIL importImage >>>image=Image.open(‘jelly.jpg’) >>>r,g,b=image.split() >>>histogram=image.histogram() 384761,489777,557209,405004,220701,154786,55807,35806,21901,16242 >>>exif=image._getexif() exif {2561935, 2573411, 271u’Panasonic’, 272u’DMC-LX7′, 2741, 282(180,1), 283(180,1), 2962, 305u’PaintShop Pro 14.00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00′, 306u’2016:08:21 07:54:57′, 36867u’2016:08:21 07:54:57′, 36868u’2016:08:21 07:54:57′, 37121’\x01\x02\x03\x00′, 37122(4,1), 37381(124,128), 373835, 37384, 3738516, 37386(47,10), 40960’0100′, 409611, 409623968, 409632232, 414952, 41728’\x03′, 41729’\x01′, 41985, 41986, 41987, 41988(,10), 4198924, 41990, 41991, 41992, 41993, 41994} |
В данном примере показано, как извлечь значение RGB (red, green, blue) изображения. Также показано, как получить гистограмму изображения
Обратите внимание, что здесь вывод немного урезан, изначально он был намного больше. Вы можете построить график гистограммы, используя другой пакет Python — matplotlib
Приведенный выше пример демонстрирует, как извлечь информацию EXIF из изображения. Опять же, здесь вывод этого метода несколько сокращен, поскольку он содержит слишком много информации, которая не имеет особого значения для статьи.
The ImageChops Module
Модуль ImageChops содержит множество арифметических операций над изображениями. Они могут быть использованы для различных целей, в том числе специальные эффекты, изображение композиции, алгоритмической живописи, и многое другое.
Операции реализованы только для 8-битных изображений (например, «L» и «RGB»).
constantImageChops.constant(image, value) => изображение
Вернёт новый слой размером с указанное изображение и заполненный цветом указанным значением value (0-255).
duplicateImageChops.duplicate(image) => изображение
Копирует изображение.
invertImageChops.invert(image) => изображение
Инверсия изображением.
lighterImageChops.lighter(image1, image2) => изображение
Сравнивает два изображения, пиксель за пикселем, и возвращает новое изображение, содержащее “лёгкие” цвета.
darkerImageChops.darker(image1, image2) => изображение
Сравнивает два изображения, пиксель за пикселем, и возвращает новое изображение, содержащее “тёмные” цвета.
differenceImageChops.difference(image1, image2) => изображение
Возвращает абсолютное значение разницы между двумя изображениями.
multiplyImageChops.multiply(image1, image2) => изображение
Накладывает два изображения друг на друга. Если умножить изображение с черным изображение, то результат будет черным.
screenImageChops.screen(image1, image2) => изображение
Накладывает два инвертированные изображения друг на друга.
addImageChops.add(image1, image2, scale, offset) => изображение
Добавляет два изображения, разделив результат на масштаб и добавив смещение. Масштаб по умолчанию 1.0, и смещение 0.0.
subtractImageChops.subtract(image1, image2, scale, offset) => изображение
Вычитание двух изображений, разделив результат на масштаб и добавив смещение. Масштаб по умолчанию 1.0, и смещение 0.0.
blendImageChops.blend(image1, image2, alpha) => изображение
То же, что функция blend в модуле Image.
compositeImageChops.composite(image1, image2, mask) => изображение
То же, что функция composite в модуле Image.