Пошаговое руководство о том, как читать изображения для обработки OpenCV

OpenCV — отличный инструмент для получения информации из изображений. В этой серии мы узнаем, как обрабатывать и анализировать изображения, чтобы мы могли обнаруживать движение, закономерности, шаблоны и даже читать тексты. Однако прежде всего нам нужны изображения для анализа, и именно об этом эта статья.

Мы рассмотрим 4 метода получения изображений для OpenCV для анализа и рассмотрим каждый из них шаг за шагом. В итоге вы сможете:

  • загрузить изображение
  • загрузить видео файл
  • читать вашу веб-камеру
  • читать свой экран
  • настроить цвета

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

Ряд

Эта статья является частью серии об обработке изображений OpenCV. Ознакомьтесь с другими статьями:

Настраивать

В этой части мы установим наши зависимости и запустим OpenCV. Цель состоит в том, чтобы получить изображение, которое мы можем использовать. Нам нужно установить только две зависимости: OpenCV и PIL (библиотека изображений Python). Установите их с помощью:

pip install opencv-python pillow

Чтение изображений

Мы начнем с простого чтения изображения из файла. Далее мы приступаем к «съемке» нашего экрана. Мы можем использовать это для анализа изображений, которые мы видим на экране (мы займемся этим позже). Наконец, мы начнем читать изображения с нашей веб-камеры и из видеофайла.

1. Загрузка файла

Сначала мы импортируем OpenCV в строку 1 (cv2 — это имя модуля OpenCV в реализации Python).

import cv2
img = cv2.imread(filename="c:/path/to/image.png")
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

В строке 3 мы загружаем изображение, а в следующей строке мы говорим cv2 показать его нам. Строка 5 говорит cv2 ждать нажатия кнопки (любой кнопки). Без этой строки изображение будет закрыто сразу после того, как cv2 покажет его. Последняя строка предназначена для очистки всех открытых окон. Вот результат:

Цвета немного не те, не так ли? Разве эта река и небо не должны быть красивыми и голубыми? Причина этого в том, что вместо RGB OpenCV использует BGR (в свое время это было популярно среди производителей камер и программного обеспечения). Это подводит нас к нашей первой операции с изображением: преобразование из BGR в RGB:

img = cv2.imread(filename="c:/path/to/image.png")
img = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2RGB)
cv2.imshow('image', img)
cv2.waitKey(0)

Добавив одну строку, мы преобразуем изображение так, чтобы оно оставалось таким, каким оно должно быть:

2. Снимайте свой экран

Хотите создать ИИ для игры или анализировать видеоданные? Затем вы можете прочитать свой экран, чтобы проанализировать изображения. Это очень похоже на загрузку файла:

import cv2
import numpy as np
from PIL import ImageGrab
while (True):
    screen = np.array(ImageGrab.grab())
    screen = cv2.cvtColor(src=screen, code=cv2.COLOR_BGR2RGB)
    cv2.imshow('my_screen', screen)
    
    # press escape to exit
    if (cv2.waitKey(30) == 27):
       break
cv2.destroyAllWindows()

В строке 6 мы используем метод PIL ImageGrab.grab(); это возвращает наш экран. Нам нужно преобразовать его в массив Numpy, чтобы OpenCV мог с ним работать. Затем в следующих строках делаем то же самое, что и раньше: конвертируем в RGB и говорим OpenCV показать нам изображение. Однако в строках 9 и 10 мы сообщаем OpenCV о выходе из цикла, когда нажимаем клавишу выхода; это то, что waitKey(30) == 27 означает. Последняя строка снова очищается.

3. Чтение веб-камеры

Давайте ускорим процесс; код очень похож на предыдущую часть.

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    frame = cv2.cvtColor(src=frame, code=cv2.COLOR_BGR2RGB)
    cv2.imshow('webcam', frame)
# press escape to exit
    if (cv2.waitKey(30) == 27):
       break
cap.release()
cv2.destroyAllWindows()

В строке 1 мы используем метод OpenCV для захвата нашей веб-камеры. Затем мы используем метод read() в строке 3 для получения двух переменных: ret, которая равна True, если мы можем читать кадры, и frame. Затем мы снова конвертируем наши цвета (на этот раз в серый), показываем рамку и ждем, пока наша клавиша выхода не будет очищена.

4. Чтение видеофайла

Чтение видеофайла очень похоже на чтение вашей веб-камеры, с той лишь разницей, что мы должны передать местоположение файла:

cap = vc2.VideoCapture('c:/path/to/my/file.mp4

Заключение

В первой части этой серии мы рассмотрели абсолютные основы загрузки изображений в OpenCV. В следующих частях мы проведем прекрасную предварительную обработку и анализ.

Не забудьте ознакомиться с другими статьями из этой серии!

Если у вас есть предложения/пояснения, пожалуйста, прокомментируйте, чтобы я мог улучшить эту статью. А пока ознакомьтесь с моими другими статьями на всевозможные темы, связанные с программированием, например:

Удачного кодирования!

— Майк

P.S. Нравится, что я делаю? "Подписывайтесь на меня!"