В 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()