Найти в Дзене
ЦифроПроф

Изображения в Python

Фото из открытых источников
Фото из открытых источников

В Python картинки открываются с помощью библиотеки OpenCV.

import numpy as np

from PIL import Image

image = Image.open('/datasets/ds_cv_images/face.png')

array = np.array(image)

print(array)

Картинка печатается в виде двумерного NumPy-массива. Рассмотрим на примерах.

Задача 1

Постройте изображение вызовом функции plt.imshow() (от англ. image show, «показать изображение»).

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt

image = Image.open('/datasets/ds_cv_images/face.png')

array = np.array(image)

plt.imshow(array)

Задача 2

Изучите функцию imshow() и добавьте аргумент, который сделает цветовую гамму чёрно-белой. Затем добавьте к изображению шкалу цвета вызовом функции colorbar()

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt

image = Image.open('/datasets/ds_cv_images/face.png')

array = np.array(image)

plt.imshow(array,cmap='gray' )

plt.colorbar()

Задача 3

Перекрасьте верхний левый угол изображения в чёрный цвет (значение 0), а нижний правый — в белый (255). С изображением можно работать как с двумерным массивом.

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt

image = Image.open('/datasets/ds_cv_images/face.png')

array = np.array(image)

array[14, 12] = 255

array[0, 0] = 0

plt.imshow(array, cmap='gray')

plt.colorbar()

Задача 4

Чтобы нейронные сети обучались лучше, обычно на вход им передают изображения в диапазоне от 0 до 1.

Приведите масштаб [0, 255] к [0, 1]. Для этого поделите все значения двумерного массива на 255.

import numpy as np

from PIL import Image

import matplotlib.pyplot as plt

image = Image.open('/datasets/ds_cv_images/face.png')

array = np.array(image)

array = array / 255

plt.imshow(array, cmap='gray')

plt.colorbar()

Цветные изображения

Цветные изображения — это трёхмерные массивы, в ячейках которых содержатся целые числа от 0 до 255. В трёхмерном массиве, полученном из изображения, первая координата — это номер строки, вторая — номер столбца, третья — номер канала.

Задача 1

Убедитесь, что каналы хранятся в третьей координате. Для этого выведите размер массива, полученного из картинки.

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

image = Image.open('/datasets/ds_cv_images/cat.jpg')

array = np.array(image)

print(array.shape)

Задача 2

Изобразите на экране канал только с красным цветом.

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

image = Image.open('/datasets/ds_cv_images/cat.jpg')

array = np.array(image)

red_channel = array[:,:,0]

plt.imshow(red_channel)

plt.colorbar()