Оглавление:

Простое определение цвета с использованием OpenCV: 6 шагов
Простое определение цвета с использованием OpenCV: 6 шагов

Видео: Простое определение цвета с использованием OpenCV: 6 шагов

Видео: Простое определение цвета с использованием OpenCV: 6 шагов
Видео: [OpenCV и роботы №1] Распознавание цветных объектов. Движение по линии и целеуказание | Orange pi 2024, Ноябрь
Anonim
Простое определение цвета с использованием OpenCV
Простое определение цвета с использованием OpenCV

Привет! Сегодня я собираюсь показать простой метод определения цвета из живого видео с использованием OpenCV и python.

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

Шаг 1. Заголовочные файлы

Заголовочные файлы
Заголовочные файлы

Здесь я использовал два файла заголовков, а именно cv2 и NumPy. По сути, cv2 - это библиотека OpenCV, которая загружает все файлы c ++, которые важны при использовании команд в кодах (она содержит все определения).

А Numpy - это библиотека Python, которая необходима для хранения многомерного массива. Мы будем использовать для хранения наших координат цветового диапазона.

И numpy as np в основном помогает нашему коду немного сократить, используя np каждый раз вместо numpy.

Шаг 2: Захват видео

Захват видео
Захват видео

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

Теперь значение внутри VideoCapture указывает камеру, в моем случае камера подключена к моему ноутбуку, поэтому 0.

Вы можете пойти аналогично 1 для дополнительной камеры и так далее. VideoCapture создает для него объект.

Шаг 3: захват кадра и определение цвета

Захват рамки и определение цвета
Захват рамки и определение цвета

Теперь здесь нам нужно что-то сделать, чтобы мы могли захватить мгновенный кадр видео, который поможет нам извлечь изображение, и мы можем работать над этим в соответствии с требованиями.

Цикл while поможет нам выполнить цикл до требуемого времени. Теперь «_, frame = cap.read ()» используется для проверки действительности захваченного кадра и сохраняет его. cap.read () - это логическая переменная, которая возвращает истину, если фрейм прочитан правильно, и если вы не получите фреймов, он не покажет никакой ошибки, вы просто получите None.

Теперь строки 11 и 12 в основном определяют диапазон цвета, который нам нужно обнаружить. Для этого я использовал синий цвет.

Вы можете продолжить с любым цветом, для чего вам нужно просто ввести значения BGR для этого конкретного цвета. Лучше определить два массива, используя массивы numpy, поскольку обнаружение определенного цвета в реальном мире не будет служить нашей цели, скорее мы определим диапазон синего цвета, чтобы он обнаруживал в пределах диапазона.

Для этого я определил две переменные, хранящие нижние значения BGR и верхние значения BGR.

Шаг 4: Маскирование и извлечение

Маскирование и извлечение
Маскирование и извлечение

Теперь наступает основная задача - замаскировать рамку и выделить цвет рамки. Я использовал предопределенные команды, присутствующие в библиотеке OpenCV, для маскировки. По сути, маскирование - это процесс удаления некоторой части кадра, то есть мы удаляем пиксели, значения цвета BGR которых не лежат в заданном цветовом диапазоне, и это выполняется cv2.inRange. После этого мы применяем цветовой диапазон к замаскированному изображению в зависимости от значений пикселей, и для этого мы будем использовать cv2.bitwise_and, он просто назначит цвета замаскированной области в зависимости от значений маски и цветового диапазона.

Ссылка на cv2. bitwise_and:

Шаг 5: Наконец-то отображается

Наконец-то отображается!
Наконец-то отображается!

Здесь я использовал базовый cv2.imshow () для отображения каждого кадра в виде изображения. Поскольку у меня есть данные кадра, хранящиеся в переменных, я могу получить их в imshow (). Здесь я отобразил все три кадра: исходный, замаскированный и цветной.

Теперь нам нужно выйти из цикла while. Для этого мы можем просто реализовать cv2.wait. Key (). В основном он сообщает время ожидания перед ответом. Поэтому, если вы передадите 0, он будет ждать бесконечно, а 0xFF сообщает, что архитектура 64-битная. "ord ()" указывает символ, который при нажатии будет выполнять команду break в блоке if и выйдет из цикла.

Затем cap.release () закрывает видеомагнитофон, а cv2.destroyAllWindows () закрывает все открытые окна.

Если у вас возникнут проблемы, дайте мне знать.

Ссылка на исходный код:

Рекомендуемые: