Пошаговое руководство о том, как читать изображения для обработки 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. В следующих частях мы проведем прекрасную предварительную обработку и анализ.
Не забудьте ознакомиться с другими статьями из этой серии!
Если у вас есть предложения/пояснения, пожалуйста, прокомментируйте, чтобы я мог улучшить эту статью. А пока ознакомьтесь с моими другими статьями на всевозможные темы, связанные с программированием, например:
- Почему Python медленный и как его ускорить
- Расширенная многозадачность в Python: применение и бенчмаркинг пулов потоков и пулов процессов
- Напишите собственное расширение для C, чтобы ускорить Python x100
- Начало работы с Cython: как выполнять ›1,7 миллиарда вычислений в секунду на Python
- Создайте быстрый автоматически документированный, удобный в сопровождении и простой в использовании Python API в 5 строк кода с помощью FastAPI
- Создайте и опубликуйте свой собственный пакет Python
- Создайте свой собственный частный пакет Python, который вы можете установить PIP из своего репозитория Git
- Виртуальные среды для абсолютных новичков — что это такое и как создать (+ примеры)
- Значительно улучшите скорость вставки в базу данных с помощью простого обновления
Удачного кодирования!
— Майк
P.S. Нравится, что я делаю? "Подписывайтесь на меня!"