Чтение изображения OpenCV cv2 в Python

Вы можете прочитать изображение в массиве numpy, используя библиотеку opencv. Массив содержит данные на уровне пикселей. И согласно требованию вы можете изменять данные изображения на уровне пикселей, обновляя значения массива.

Чтобы прочитать изображение в Python с помощью OpenCV, используйте функцию cv2.imread(). Она возвращает двухмерную или трехмерную матрицу в зависимости от количества цветовых каналов, присутствующих в изображении. Для двоичного изображения или изображения в градациях серого достаточно двухмерного массива. Но для цветного изображения нужен 3D-массив.

Мы узнаем, в каком порядке функция imread() декодирует цветовые каналы изображения, и как обрабатывает различные расширения изображения.

Синтаксис

Синтаксис функции приведен ниже.

cv2.imread(/path/to/image, flag)

Где, /path/to/image должен быть полным абсолютным путем к изображению. flag является необязательным, и для него можно передать одно из следующих возможных значений:

  • IMREAD_COLOR считывает изображение с цветами RGB, но без канала прозрачности. Это значение по умолчанию для флага, когда в качестве второго аргумента для cv2.imread() не указано значение.
  • IMREAD_GRAYSCALE считывает изображение, как серое. Если исходное изображение является цветным, значение серого каждого пикселя вычисляется путем взятия среднего значения цветовых каналов и считывается в массив.
  • IMREAD_UNCHANGED считывает изображение, как есть из источника. Если исходное изображение является RGB, оно загружает изображение в массив с красным, зеленым и синим каналами. Если исходное изображение – ARGB, оно загружает изображение с тремя цветовыми компонентами вместе с альфа-каналом или каналом прозрачности.

Пример 1: чтение цветного изображения

В этом примере мы будем читать цветное изображение. Поскольку значение аргумента флага по умолчанию – cv2.IMREAD_COLOR, мы не передаем flag явно.

import cv2
#read image
img = cv2.imread('D:/image-1.png')
#print its shape
print('Image Dimensions :', img.shape)

Запустите указанную выше программу в Python, и вы получите следующий результат.

Image Dimensions : (400, 640, 3)

img.shape возвращает кортеж, представляющий (высоту, ширину, число каналов). Высота изображения 400 пикселей, ширина 640 пикселей, в изображении три цветовых канала. Для cv2.IMREAD_COLOR канал прозрачности игнорируется, даже если он присутствует.

Пример 2: считывание серого изображения

В этом примере мы будем читать изображение в градациях серого. На входе может быть цветное изображение в градациях серого. Но, если аргумент флага – IMREAD_GRAYSCALE, изображение в градациях серого.

import cv2
 
img = cv2.imread('D:/image-1.png', cv2.IMREAD_GRAYSCALE)
 
print('Image Dimensions :', img.shape)

Вывод:

Image Dimensions : (400, 640)

Высота изображения составляет 400 пикселей, ширина – 640. Каждый элемент в массиве представляет значение серой шкалы в соответствующем пикселе.

Пример 3:  чтение изображения с прозрачным каналом

В этом примере мы будем читать изображение с каналом прозрачности. Если в изображении есть канал прозрачности, мы можем передать IMREAD_UNCHANGED для чтения вместе с цветовыми каналами.

import cv2
 
img = cv2.imread('D:/image-1.png', cv2.IMREAD_UNCHANGED)
 
print('Image Dimensions :', img.shape)

Вывод:

Image Dimensions : (400, 640, 4)

Мы прочитали все четыре канала изображения, именно красный, зеленый, синий и прозрачность.

Цветовые каналы

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

Если (400, 640, 4) – это форма изображения, то:

  • (:,:, 0) представляет синий канал;
  • (:,:, 1) представляет зеленый канал;
  • (:,:, 2) представляет красный канал;
  • (:,:, 3) представляет канал прозрачностию

Расширения файлов

Для изображений используется множество расширений в зависимости от операционной системы, техники сжатия и т.д.

Когда метод imread() считывает изображение, он не учитывает расширение имени файла изображения для определения формата. Но определяет расширение на основе формата, представленного в данных файла.

imread() поддерживает файлы JPEG, PNG и TIFF на всех платформах. Но для комбинации других форматов и операционных систем функция может рассматривать кодеки уровня операционной системы.

Заключение

Завершая это руководство по примерам Python, мы научились использовать метод cv2 imread() для чтения изображения в массиве.

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

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