Как вывести картинку в python
Перейти к содержимому

Как вывести картинку в python

  • автор:

Как импортировать (загрузить) изображение в python?

Язык программирования Python

Примеры того, как импортировать (загрузить) изображение в python:

Импорт изображения с помощью matplotlib

Чтобы импортировать изображение в python, одним из решений является использование matplotlib:

from matplotlib import image from matplotlib import pyplot as plt img = image.imread("fav.jpg")
Code language: JavaScript (javascript)
print(type(img)) print(img.shape)
Code language: PHP (php)
class 'numpy.ndarray'>
Code language: HTML, XML (xml)
(300, 450, 3)

3 соответствует режиму RGB.

После этого можно вывести изображение с помощью imshow из matplotlib в виде графика.

plt.imshow(img) plt.show()
Code language: CSS (css)

Импорт изображения с помощью Pillow

Другое решение – использовать Pillow

from PIL import Image from matplotlib import pyplot as plt img= Image.open("fav.jpg")
Code language: JavaScript (javascript)
type(img)

не является массивом numpy:

PIL.JpegImagePlugin.JpegImageFile
Code language: CSS (css)

Тем не менее, все еще можно вывести изображение на экран с помощью imshow

plt.imshow(img) plt.show()
Code language: CSS (css)

Для преобразования img в матрицу numpy

import numpy as np img = np.asarray(img)
Code language: JavaScript (javascript)

Как открыть картинку через Python?

Чтобы открыть картинку, используя приложение по умолчанию, на Windows:

#!/usr/bin/env python import os os.startfile(r'D:\picture.jpg') 

Отслеживать
ответ дан 31 мар 2015 в 21:45
52.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков

Открыть наверное значит загрузить для показа (или обработки)? Если да то попробуйте через PIL, примерно так:

from PIL import Image #. img = Image.open(r'D:\picture.jpg') img.show() 

Отслеживать
47.5k 17 17 золотых знаков 56 56 серебряных знаков 99 99 бронзовых знаков
ответ дан 8 мар 2015 в 12:39
928 1 1 золотой знак 6 6 серебряных знаков 17 17 бронзовых знаков

Похоже, что человек хочет открыть ее в приложении по умолчанию, и при запуске из PyCharm что-то не так с окружением.

9 мар 2015 в 2:37
если использовать PIL, то картинка должна быть в папке с проектом?
9 мар 2015 в 14:09
Она может быть где угодно.
9 мар 2015 в 14:16

если обратный слэш есть в пути, то лучше r» константу использовать (в данном случае это не важно, так как ‘\p’ == r’\p’ , но в общем случае ‘\t’ != r’\t’ ).

31 мар 2015 в 21:43

Попробуйте так (картинка откроется в веб-браузере):

import webbrowser webbrowser.open(r"D:\picture.jpg") 

Отслеживать
47.5k 17 17 золотых знаков 56 56 серебряных знаков 99 99 бронзовых знаков
ответ дан 17 мар 2015 в 4:36
Алексей Лобанов Алексей Лобанов
1,202 9 9 серебряных знаков 22 22 бронзовых знака

Вы можете это сделать, например, с помощью специализированных библиотек для обработки изображений и обработки данных. opencv требует установки дополнительных пакетов. Но, при этом, позволяет, помимо прочего, широкий спектр возможностей для обработки изображений. Вторая matplotlib устанавливается легко, интегрируется в pyCharm и позволяет использовать довольно удобный встроенный интерфейс для просмотра. К сожалению, эта библиотека не предоставляет возможности для обработки изображений, а только для их визуализации.

введите сюда описание изображения

Opencv

import cv2 img = cv2.imread('x.jpg', 0) cv2.imshow('', img) cv2.waitKey(0) 

matplotlib:

from matplotlib import pyplot as plt img = plt.imread('x.jpg') plt.imshow(img) plt.show() 

matplotlib:

введите сюда описание изображения

введите сюда описание изображения

opencv:

Установка opencv:

sudo apt-get install -y cmake make libsm6 libxext6 libxrender-dev git clone https://github.com/opencv/opencv.git mkdir ./opencv/build cd ./opencv/build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 make install 

Флаг j указывает число процессов, которые будут использованы при установке

Установка matplotlib:

pip install matplotlib pip install pillow 

Если библиотека pillow не будет установлена, то можно будет пользоваться только * .png

Pillow — работа с картинками

Pillow — самая популярная библиотека для работы с изображениями в Python. С помощью неё картинки можно открывать, вращать, накладывать фильтры и даже работать с отдельными пикселями.

Обзор

Импортируется библиотека так:

from PIL import Image 

Pillow — улучшенная версия библиотеки PIL , поэтому импортируется она таким странным образом. В коде она будет называться PIL .

Далее попробуем что-нибудь сделать с картинкой:

from PIL import Image image = Image.open("example.jpg") rotated_image = image.rotate(45) rotated_image.save("rotated.jpg") 

Сначала открываем картинку с названием example.jpg и кладём её в переменную image . На следущей строке поворачиваем картинку на 45 градусов. Метод .rotate() не меняет картинку, а создаёт новую, поэтому положим её в переменную rotated_image . И в конце сохраняем повёрнутую картинку в новый файл rotated.jpg .

Атрибуты картинок

В Pillow есть новые типы данных: JpegImageFile , PngImageFile … Они позволяют хранить картинки прямо в переменных Python. У картинок есть несколько атрибутов, которые понадобятся вам в будущем:

  • format — формат данных картинки: jpeg , png …
  • mode — цветовая модель картинки: CMYK , RGB , L — для чёрно-белых изображений.
  • width — ширина картинки в пикселях.
  • height — высота картинки в пикселях.
  • size — размер картинки в пикселях. Возвращает tuple : (ширина, высота).

Как их извлечь:

from PIL import Image image = Image.open("example.jpg") print(image.format) # Выведет JPG print(image.mode) # Например, может вывести RGB 

Открыть картинку

Для открытия картинки используется функция Image.open() .

В качестве аргументов она принимает на вход путь до файла, который нужно открыть:

from PIL import Image image = Image.open("example.jpg") 

Сохранить картинку в файл

Для сохранения картинки есть метод .save() .

В качестве аргументов он принимает:

  • Путь до файла, в который сохранить картинку.
  • Именованный необязательный параметр format , в котором передаётся формат сохраняемой картинки.
from PIL import Image image = Image.open("example.jpg") image.save("new.jpg") image.save("another.jpg", format="JPEG") 

В качестве результата появится 2 копии картинки: new.jpg и another.jpg .

Перевести картинку в другую цветовую модель

О цветовой модели вы можете прочитать в разделе Атрибуты. Чтобы поменять цветовую модель картинки, нужно воспользоваться методом .convert() . Он принимает на вход именной аргумент mode :

from PIL import Image image = Image.open("example.jpg") print(image.mode) # Вывелось RGB cmyk_image = image.convert("CMYK") print(cmyk_image.mode) # Вывелось CMYK print(image.mode) # Вывелось RGB 

Заметим, что метод не меняет исходную картинку, а создаёт её копию с цветовой моделью CMYK . Поэтому мы положили её в отдельную переменную.

Обрезать картинку

За обрезание картинки отвечает метод .crop() . Он принимает на вход кортеж из 4 чисел: координат углов новой картинки. Координаты отсчитываются с левого верхнего угла картинки:

Координаты нужно передать в таком порядке: слева, сверху, справа, снизу. Например, вы хотите отрезать 10 пикселей слева и 15 сверху:

from PIL import Image image = Image.open("example.jpg") coordinates = (10, 15, image.width, image.height) cropped = image.crop(coordinates) # Отрежется 10 пикселей слева и 15 сверху 

Этот код отрезает 10 пикселей слева и 15 сверху. Самая правая координата — это и есть ширина картинки, а самая нижняя — высота, поэтому мы и использовали эти атрибуты картинки.

Разделить картинку на каналы

Картинки состоят из пикселей разных цветов. Каждый пиксель картинки в RGB состоит из 3 значений: сколько в нём красного, сколько зелёного и сколько синего. А в цветовой схеме CMYK из четырёх: голубой, пурпурный, жёлтый и чёрный. Все значения от 0 до 255. 0 — нет такого цвета, а 255 — его очень-очень много.

На самом деле картинки хранят не по пикселям, а по каналам. RGB картинка хранится как 3 картинки: в первой в каждом пикселе число от 0 до 255, показывающее, сколько в нём красного. Во второй то же, только с зелёным, а в третьем — с синим.

Получается 3 картинки. Но если взять какой-то цветовой канал отдельно от картинки, то она не будет знать, какой цвет ей показывать. У неё в каждом пикселе всего одно значение от 0 до 255. Поэтому она отображается как чёрно-белая. Если в пикселе хранится 0, то пиксель будет чёрный, а если 255 — белый. Чем больше число, тем светлее пиксель.

Метод .split() разбивает картинку на каналы. Работает так:

from PIL import Image image = Image.open("example.jpg") print(image.mode) # Вернуло CMYK, значит канала 4 cyan, magenta, yellow, key_color = image.split() # В переменные запишутся 4 чёрно-белые картинки. 

Собрать картинку из каналов

Pillow позволяет разделять картинку на каналы. Но так же позволяет и собирать её обратно. За это отвечает функция Image.merge() . Она принимает на вход 2 аргумента:

  • Цветовая модель будущей картинки
  • Кортеж из цветовых каналов. Если модель RGB, то первый канал будет покрашен в красный, второй в зелёный, третий в синий.
from PIL import Image image = Image.open("example.jpg") print(image.mode) # Вернуло CMYK, значит канала 4 cyan, magenta, yellow, key_color = image.split() # В переменные запишутся 4 чёрно-белые картинки. new_image = Image.merge("CMYK", (cyan, magenta, yellow, key_color)) 

new_image ничем не отличается от image , т.к. состоит из тех же каналов в том же порядке.

Покрасить цветовой канал

Pillow позволяет раскрашивать чёрно-белые картинки. За это отвечает функция ImageOps.colorize() .

Она принимает 3 аргумента: Картинка, какой цвет показывать вместо чёрного и какой вместо белого. Пример:

from PIL import Image, ImageOps image = Image.open("example.jpg") colorized = ImageOps.colorize(image, black ="red", white ="yellow") 

Код выше сделает из такой картинки:

Изменить размер картинки

Как работает thumbnail

Метод resize приводит картинку к желаемому размеру без сохранения пропорций. Картинка жмётся, становится некрасивой:

Метод thumbnail сохраняет пропорции:

Подробнее о thumbnail

С помощью метода .thumbnail() можно легко сделать миниатюру изображения. Миниатюра — уменьшенная версия картинки, с сохранением пропорций. На вход принимается кортеж с максимальными шириной и высотой. Метод .thumbnail() сам подберёт новые координаты так, чтобы картинка поместилась в заданную область. Например, у вас есть картинка 800×1200 и вы хотите поместить её в рамку 1200×600, то результат метода будет 400×600, т.к. 400×600 как раз помещается в 1200×600:

from PIL import Image image = Image.open("example.jpg") print(image.size) # Вывелось (800, 1200) image.thumbnail((1200, 600)) # Картинка теперь размера 400 на 600 print(image.size) # Вывелось (400, 600) 

Наложить картинки друг на друга

Функция Image.blend() создаёт новую картинку, накладывая одно изображение поверх другого. Для работы ему необходимы три аргумента:

  • Первая картинка.
  • Вторая картинка, того же размера, что и первая.
  • Коэффициент прозрачности.

Если прозрачность равна 0.5, то картинки смешаются в равных долях. Если коэффициент равен 1.0, то первая картинка станет полностью прозрачной и останется только вторая. Если 0.0, то наоборот. Прозрачность задаётся дробным числом через точку.

from PIL import Image image1 = Image.open("image1.jpg") image2 = Image.open("image2.jpg") image3 = Image.blend(image1, image2, 0.5) # Получится картинка, сложенная из двух 

Наложить со смещением

Отдельного метода для этого нет, но получается за счёт комбинации .crop() и Image.blend().

  1. Выберите картинку для эффекта. У нас это картинка wave.png с шириной в 1000 пикселей.
  2. Отрежьте от неё 200 пикселей слева. Получится wave_left.png шириной 800 пикселей.
  3. Возьмите исходную картинку wave.png и отрежьте от неё по 100 пикселей с обоих сторон: слева и справа. Получится wave_middle.png тоже шириной в 800 пикселей.
  4. Наложите wave_left.png на wave_middle.png с помощью Image.blend()
  5. Сохраните в файл то, что получилось. Это картинка смещённая влево.

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Инструменты для работы с изображениями в Python и Pillow

Инструменты для работы с изображениями в Python и Pillow

Автор телеграм-канала CODE BLOG Вадим Шванов написал для нас статью о работе с изображениями c использованием языка Python и Pillow. В ней он рассматривает основы работы с изображениями в Python, показывает, как создать фильтры для фотографий в библиотеке Pillow, преобразовать изображение в массив в библиотеке NumPy и использовать matplotlib для настраиваемого вывода результата на экран. Дочитайте до конца: там вы найдете ссылку на .ipynb-документ со всем используемым кодом, который вы сможете загрузить.

Кому это нужно?

  • создание своего фоторедактора;
  • создание масок для Instagram;
  • анализ и распознавание образов в компьютерном зрении.

Освойте профессию
«Fullstack-разработчик на Python»

Fullstack-разработчик на Python

Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.

картинка - 2023-03-14T190323.524

Профессия / 12 месяцев
Fullstack-разработчик на Python

Создавайте веб-проекты самостоятельно

dffsdd (3)

А я справлюсь?

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

Установка пакетов

NumPy и matplotlib можно установить с помощью пакетного менеджера pip, запустив следующие команды в терминале:

pip install numpy
pip install matplotlib

С Pillow сложнее: Python старше версии 3.6 поддерживает установку этого пакета через pip, а с другими версиями может возникнуть ошибка. Совместимость версий можно посмотреть тут.

Для этого примера в качестве среды разработки выбран Jupyter Notebook.

Начало работы

Импортируйте все необходимые модули и загрузите изображение в объект Python:

Как правило, NumPy импортируется с псевдонимом np, а matplotlib.pyplot — plt.

Загрузите изображение с помощью функции open() подмодуля Image:

Jupyter Notebook выводит изображения по их имени. Вот то самое изображение, путь к которому мы передали в функцию:

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

Вывод изображений с matplotlib

Это функция, которую мы будем использовать далее:

Она принимает два параметра: img — массив, который вы получили из исходной фотографии, и title — заголовок, который по умолчанию имеет значение None. Измените размеры фигуры на 6×6, чтобы сделать вывод изображения больше, и выведите его на экран. Также проверьте, был ли указан заголовок. Если нет — установите его с помощью функции title(). Выключите пометки на осях, указав ‘off’ в функции axis().

Станьте Fullstack-разработчик на Python и найдите стабильную работу
на удаленке

Как сделать изображение черно-белым

Здесь мы будем использовать метод convert() класса изображения PIL.

Функция выглядит просто:

Мы представили изображение в RGB-формате, то есть каждый пиксель имеет три значения: красный (R), зеленый (G) и синий (B). Оттенки серого получаются, когда все эти три значения равны. Есть известная формула яркости пикселя:

Но Pillow использует свои коэффициенты:

Изображение потеряло в качестве из-за того, что его растянули с помощью matplotlib.

Станьте Fullstack-разработчик на Python и найдите стабильную работу
на удаленке

Как переформатировать изображение в массив

Теперь мы будем использовать инструменты NumPy, поэтому желательно конвертировать изображение в np.array:

Конструктор массива принимает изображение в качестве аргумента и создает такой массив. Форму массива можно узнать с помощью поля shape.

224×225 — размеры нашего изображения. «3» появляется из-за того, что каждый пиксель представлен тремя значениями.

Как добавить фильтр «Негатив»

Значения цветов могут меняться от 0 до 255. Негатив — эффект инвертирования цветов. Достигается он просто: от 255 нужно отнять значение цвета. Так как все операции над массивом NumPy выполняются поэлементно, то мы отнимем от 255 текущий массив:

С помощью функции show() оценим результат:

Как отзеркалить изображение

Следующая задача — отражение изображения слева направо (т. е. правая и левая стороны изображения меняются местами). В NumPy есть функция fliplr. Про ее применение можно найти информацию здесь.

Передайте исходный массив в fliplr:

Этот фрагмент кода не изменяет массив, а возвращает новый, что нам и нужно. Оценим результат работы:

Как добавить эффект

Идея этого эффекта проста — нужно сделать изображение как можно синее. Для этого замените каждое третье «значение пикселя» на максимальное — 255.

Здесь нужно поменять сам массив, и, чтобы не потерять исходное изображение, скопируйте последовательность с помощью np.copy().

Другой вариант конструкции:

Весь код из статьи вы сможете найти в этом документе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *