Зачем нужно конвертировать изображение в массив numpy? - PullRequest
1 голос
/ 19 мая 2019

Я смотрел учебник по проекту распознавания лиц с использованием OpenCV, numpy, PIL. Во время обучения изображение было преобразовано в массив с нулями, зачем его преобразовывать в массив с нулями?

КОД:

PIL_IMAGE = Image.open(path).convert("L")
image_array = np.array(PIL_IMAGE, "uint8")

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Ответ довольно прост:

С помощью Numpy вы можете выполнять невероятно быстрые операции с числовыми массивами, независимо от их размера, формы и т. Д.

Библиотеки обработки изображений (OpenCV, PIL, scikit-image) иногда оборачивают изображения в какой-то специальный формат, который уже использует Numpy за кулисами. Если они еще не используют Numpy в фоновом режиме, изображения можно явно преобразовать в массивы Numpy. Затем вы можете выполнять быстрые численные расчеты по ним (свертка, БПФ, размытие, фильтры, ...).

1 голос
/ 19 мая 2019

TLDR; Изображения OpenCV хранятся в виде трехмерных массивов Numpy.

При чтении цифровых изображений с использованием библиотеки они представляются в виде массивов Numpy.Прямоугольная форма массива соответствует форме изображения.Рассмотрим это изображение стула

enter image description here

Вот визуализация того, как это изображение хранится в виде массива Numpy в OpenCV

enter image description here

Если мы прочитаем изображение стула, мы увидим, как оно структурировано с image.shape, который возвращает кортеж (height, width, channels).Свойства изображения будут кортежем количества строк, столбцов и каналов, если это цветное изображение.Если это изображение в градациях серого, image.shape возвращает только количество строк и столбцов.

import cv2

image = cv2.imread("chair.jpg")
print(image.shape)

(222, 300, 3)

При работе с изображениями OpenCV мы сначала указываем координату y, а затем координату x.Цвета хранятся в виде значений BGR: синий в слое 0, зеленый в слое 1 и красный в слое 2. Таким образом, для этого изображения стула оно имеет высоту 222, ширину 300 и 3 канала (то естьэто цветное изображение).По сути, когда библиотека читает любое изображение, она сохраняет его как массив Numpy в этом формате.

...