Запуск команды
Прежде всего, запустим IPython. Это улучшенная версия стандартного приглашения Python, которая хорошо сочетается с Matplotlib. Вы можете запустить IPython в оболочке или в IPython Notebook.
После запуска IPython нам нужно подключиться к графическому циклу событий. Он сообщает IPython, где (и как) отображать графику. Чтобы подключиться к циклу графического интерфейса, выполните команду %matplotlib
в приглашении IPython. В документации по циклу графического интерфейса IPython есть более подробная информация.
Если вы используете IPython Notebook, вы можете использовать ту же команду, но люди обычно используют параметр inline
с командой %matplotlib
:
In [1]: %matplotlib inline
Это откроет встроенное отображение графиков, графики будут отображаться в записной книжке. Это оказывает важное влияние на интерактивность. Для встроенного отображения графики команды для отображения графиков, выданные в ячейке под ячейкой, создавшей график, не влияют на график. Например, невозможно изменить цветовую карту из ячейки под ячейкой создания графика. Однако для других бэкэндов, таких как qt4, они открывают отдельное окно, и ячейки под ячейками, создавшими график, изменят график — это живой объект в памяти.
В этом руководстве мы будем использовать командный интерфейс построения графиков pyplot
библиотеки matplotlib
. Этот интерфейс поддерживает глобальное состояние и полезен для быстрого и простого экспериментирования с различными настройками графиков. Другой вариант — объектно-ориентированный интерфейс, который также очень мощный и обычно лучше подходит для разработки больших приложений. Если вы хотите узнать об объектно-ориентированном интерфейсе, страница с часто задаваемыми вопросами о его использовании является хорошим местом для начала. Теперь давайте продолжим использовать командный подход:
In [2]: import matplotlib.pyplot as plt
In [3]: import matplotlib.image as mpimg
In [4]: import numpy as np
Загрузка данных изображения в массив NumPy
Загрузка данных изображений поддерживается библиотекой Pillow. Изначально matplotlib
поддерживал только PNG-изображения. Если чтение с локального компьютера не удаётся, команда ниже вернётся к Pillow.
Изображение, которое мы используем в этом примере, представляет собой файл PNG, но помните, что требования к вашим собственным данным могут отличаться от Pillow.
Вот изображение, с которым мы будем работать:
Оно представляет собой 24-битное RGB-изображение PNG (8 бит на R, G и B). В зависимости от того, откуда вы получаете данные, наиболее вероятными другими типами изображений, с которыми вы столкнётесь, являются изображения RGBA, которые имеют альфа-канал или одноканальные изображения в оттенках серого (яркость). Вы можете щёлкнуть правой кнопкой мыши на изображении и выбрать «Сохранить изображение как» (Save image as), чтобы загрузить оставшуюся часть этого учебника на свой компьютер.
Теперь мы начинаем...
In [5]: img=mpimg.imread('stinkbug.png')
Out[5]:
array([[[ 0.40784314, 0.40784314, 0.40784314],
[ 0.40784314, 0.40784314, 0.40784314],
[ 0.40784314, 0.40784314, 0.40784314],
...,
[ 0.42745098, 0.42745098, 0.42745098],
[ 0.42745098, 0.42745098, 0.42745098],
[ 0.42745098, 0.42745098, 0.42745098]],
...,
[[ 0.44313726, 0.44313726, 0.44313726],
[ 0.4509804 , 0.4509804 , 0.4509804 ],
[ 0.4509804 , 0.4509804 , 0.4509804 ],
...,
[ 0.44705883, 0.44705883, 0.44705883],
[ 0.44705883, 0.44705883, 0.44705883],
[ 0.44313726, 0.44313726, 0.44313726]]], dtype=float32)
Обратите внимание на dtype
здесь — float32
. Matplotlib уже преобразовал 8-битные данные каждого канала в числа с плавающей запятой между 0,0 и 1,0. Как примечание, Pillow может использовать только один тип данных, uint8
. Matplotlib может обрабатывать графики float32
и uint8
, но для любого формата изображения, кроме PNG, чтение/запись ограничены данными uint8
. Почему 8 бит? Большинство дисплеев могут отображать только 8-битный цветовой градиент на каждый канал. Почему они могут отображать только 8 бит на канал? Потому что это то, что может видеть человеческий глаз. Подробнее см. (с точки зрения фотографии): учебник Luminous Landscape по глубине цвета.
Каждый внутренний список представляет пиксель. Здесь, для RGB-изображений, есть 3 значения. Поскольку это чёрно-белое изображение, R, G и B похожи. RGBA (где A — альфа или прозрачность) имеет 4 значения для каждого внутреннего списка, а простое изображение яркости имеет только одно значение (поэтому это двумерный массив, а не трёхмерный). Для изображений RGB и RGBA matplotlib
поддерживает типы данных float32
и uint8
. Для яркости matplotlib
поддерживает только float32
. Если ваш массив данных не соответствует ни одному из этих описаний, вам необходимо масштабировать его.
Отображение массива NumPy в виде графика
Итак, вы сохранили свои данные в массиве numpy
(импортировав его или сгенерировав). Давайте визуализируем его. В Matplotlib это делается с помощью функции imshow()
. Здесь мы захватим объект plot
. Этот объект предоставляет простой способ обработки графиков из командной строки.
In [6]: imgplot = plt.imshow(img)
Вы также можете построить любой массив NumPy.
Псевдоцвета могут быть полезным инструментом для улучшения контраста и облегчения визуализации ваших данных. Они особенно полезны при демонстрации ваших данных с помощью проектора — их контраст обычно оставляет желать лучшего.
Псевдоцвет применим только к одноканальным изображениям в градациях серого. У нас сейчас есть RGB-изображение. Поскольку R, G и B схожи (см. выше или ваши данные), мы можем выбрать данные только одного канала:
In [7]: lum_img = img[:,:,0]
Это нарезка массива, подробнее см. в учебнике NumPy.
In [8]: plt.imshow(lum_img)
Здесь у нас есть изображение в градациях серого (2D, без цвета), к которому применена цветовая схема по умолчанию (также называемая палитрой, LUT). Цветовая схема по умолчанию называется jet
. Существует множество других вариантов на выбор.
In [9]: plt.imshow(lum_img, cmap="hot")
Пожалуйста, обратите внимание, что вы также можете использовать метод set_cmap()
, чтобы изменить цветовую схему существующего графика на графике:
In [10]: imgplot = plt.imshow(lum_img)
In [11]: imgplot.set_cmap('spectral')
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )