1. Подготовка
Вам понадобится:
1. Python
2. Исходное изображение
3. Ubuntu Linux или WSL (рекомендуется, но не обязательно)
2. Установка
Установка с помощью apt-get (Рекомендуемый способ для Ubuntu Linux)
sudo apt-get install python3-pip
Установка с помощью pip (Рекомендуемый способ для всех остальных ОС)
pip install pillow
3. Базовые функции
3.1. Импортирование изображений
from PIL import Image
img = Image.open("<название файла>.<формат файла>")
То есть, если у меня есть файл bliss.jpg, то открытие файла будет
from PIL import Image
img = Image.open("bliss.jpg")
3.2. Отображение на экране
Открыли, теперь отобразим на экране. Для этого используется функция img.show
from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").show() #Открываем изображение и сразу же показываем на экране
ВНИМАНИЕ: img.show всего лишь сохраняет временный файл, и открывает его в просмотре изображений. Если такового у вас нет, см. 3.4. Сохранение
3.3. Изменяем разрешение изображения
Моё оригинальное изображение имеет разрешение 640x427. К примеру, нам необходимо изменить разрешение до 128x128. Для того чтобы это сделать напишем такой код:
from PIL import Image #Импортируем библиотеку
img = Image.open("bliss.jpg") #Открываем изображение
img = img.resize((128, 128)) #Изменяем разрешение
img.show() #Отображаем на экран
3.4. Сохранение
Для того чтобы сохранить наше изображение, мы будем использовать функцию im.save. Думаю долго объяснять не нужно т.к. функция работает совершенно также как и im.show.
3.5 Изменение разрешения без изменения соотношения сторон масштабирования
(англ. Relative resizing)
from PIL import Image, ImageOps
size = (100, 150) #Выставление разрешения для масштабирования
with Image.open("bliss.jpg") as im: #Открываем изображение для изменения
ImageOps.contain(im, size).save("imageops_contain.webp") #"Содержит"
ImageOps.cover(im, size).save("imageops_cover.webp") #"Закрывает"
ImageOps.fit(im, size).save("imageops_fit.webp") #"Помещается"
ImageOps.pad(im, size, color="#f00").save("imageops_pad.webp")"Уменьшается"
# thumbnail() тоже используется,
# но изменяет обьект вместо копирования.
im.thumbnail(size) #"Логотип"
im.save("image_thumbnail.webp")
3.6. Конвертирования цветности изображения
Список цветовых пространств:
- L - Изображение в оттенках серого
- 1 - Чёрно-белое изображение с dither'ингом
- P - 8-битное изображение привязанное к палитре
- RGBA - RGB с прозрачностью
- F - 32-битный стандарт цветов с плавающей запятой. Также как и I, плохо описывается в документации.
Список экспериментальных цветовых пространств:
- LA - L с прозрачностью
- PA - P с прозрачностью
- RGBX - RGB с увеличенным количеством возможных цветов
- RGBa - RGB с увеличенным качеством прозрачности
- La - L с улучшенной прозрачностью
- I;16 - Информация в рунете отсутствует. Оф. описание: 16-bit unsigned integer pixels
- I;16L - Информация в рунете отсутствует. Оф. описание: 16-bit little endian unsigned integer pixels
- I;16B - Информация в рунете отсутствует. Оф. описание: 16-bit big endian unsigned integer pixels
- I;16N - Информация в рунете отсутствует. Оф. описание: 16-bit native endian unsigned integer pixels
Пример кода:
from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").convert("1").show() #Открытие изображения, преобразование в чёрно-белый с dither'ингом, отображение на экране.
from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").convert("P").convert("RGB").show() #Открытие изображения, преобразование в палитру с dither'ингом и обратно, отображение на экране.
3.7. Вырезаем изображение...
from PIL import Image
img = Image.open("bliss.jpg")
region = img.crop((0, 0, 64, 64))
region.show()
3.8. ...Поворачиваем и вставляем обратно.
from PIL import Image
box = (0, 0, 256, 256)
img = Image.open("bliss.jpg")
region = img.crop(box)
region = region.transpose(Image.Transpose.ROTATE_180)
img.paste(region, box)
img.show()
3.9. Поворачиваем
from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").rotate(90).show()
4. Pillow И CV2
pip install opencv-python
pip install numpy
Для Ubuntu/Debian:
sudo apt-get install python3-numpy
sudo apt-get install python3-opencv
4.1. Конвертация в формат CV2 и отображение
from PIL import Image
import cv2 as cv
import numpy as np
img = np.array(Image.open("bliss.jpg"))
cv.imshow('Заголовок',img)
По сравнению с Pillow, cv2 имеет встроенную программу для просмотра изображения. Поэтому, мы можем написать заголовок для окна. Если без закрытия окна предыдущего изображения с таким же заголовком, то предыдущее окно обновиться. Можно использовать для отображения видео.
Доп. информация:
Официальная документация Pillow: https://pillow.readthedocs.io/en/stable/index.html
Официальная документация CV2: https://docs.opencv.org/4.x/index.html