Оглавление:

Обнаружение цвета в Python с использованием OpenCV: 8 шагов
Обнаружение цвета в Python с использованием OpenCV: 8 шагов
Anonim
Image
Image

Привет! Это руководство используется в качестве руководства по извлечению определенного цвета из изображения в Python с использованием библиотеки openCV. Если вы новичок в этой технике, не волнуйтесь, в конце этого руководства вы сможете запрограммировать свою собственную программу обнаружения цвета.

Ниже приведены функции или, можно сказать, методы, которые вы будете изучать.

1. Как читать изображение

2. Как создать трек-бары

3. Как настроить значение оттенка, насыщенности и значения изображения с помощью полос прокрутки.

4. А затем будет ваш окончательный результат.

Вы можете посмотреть видео с выходом, которое я прикрепил ниже.

Итак, приступим

Запасы

  • Python 3
  • библиотека openCV
  • библиотека numpy

Шаг 1. Импорт библиотек

Импорт библиотек
Импорт библиотек

На изображении изображен желтый феррари, как показано, и мы запрограммируем извлечение только желтого цвета из этого изображения.

Первым шагом будет импорт наших библиотек

1. Включая библиотеку openCV. В Python это называется cv2.

2. Включение библиотеки numpy как np. "As" позволяет нам использовать numpy как np, поэтому нет необходимости писать numpy снова и снова.

Шаг 2: Создание полос трека

Создание полос трека
Создание полос трека

Полосы дорожки создаются для настройки значений оттенка, насыщенности и значения в изображении.

cv2. namedWindow ("TrackBars") Эта строка кода используется для создания нового окна вывода, а имя окна дается как TrackBars (вы можете дать любое имя по своему усмотрению)

cv2.resizeWindow ("TrackBars", 600, 250) Эта функция используется для изменения размера окна. «TrackBars» - это окно, размер которого вы хотите изменить, поскольку я хотел изменить размер окна TrackBars, я написал это имя. За ними следуют два целых числа. Эти два целых числа - ширина и высота. Вы можете поиграть с этими двумя числами, чтобы изменить размер

Шаг 3: Создание трекбаров для оттенка, насыщенности и значения

Создание трекбаров для оттенка, насыщенности и значения
Создание трекбаров для оттенка, насыщенности и значения
Создание трекбаров для оттенка, насыщенности и значения
Создание трекбаров для оттенка, насыщенности и значения

Теперь мы создадим всего 6 трекбаров для оттенка, насыщенности и значения. У каждого будет два, т.е. 1 для минимума и 1 для максимума. Мы будем использовать функцию createTrackbar в openCV. Сначала мы увидим синтаксис этой функции.

cv2.createTrackbar ("WINDOWNAME", "MAINWINDOWNAME", "RANGE"). Это может сбивать с толку, но не волнуйтесь, мы пройдем через каждый шаг. Имейте в виду, что в openCV значения оттенка 179, насыщенность 255 и значение 255.

1. Создание TrackBar для минимального оттенка:

cv2.createTrackbar ("Hue min", "TrackBars", 0, 179, пусто)

В этом Hue min - имя трекбара, TrackBars - это главное окно, 0 - позиция, в которой будет находиться наш ползунок, а 179 - это диапазон, означающий, что сильдер будет перемещаться от 0 до 179.

2. Создание TrackBar для максимального оттенка:

cv2.createTrackbar ("Максимальный оттенок", "TrackBars", 179, 179, пусто)

В этом Hue max - это имя трекбара, TrackBars - это главное окно, 179 - это позиция, в которой будет находиться наш ползунок, а 179 - это максимальный диапазон, который означает, что сильдер переместится из 179-0.

3. Аналогичным образом повторите шаги для sat min, sat max, val min и val max, как показано на изображении.

Изображение с белым фоном является выходным изображением. Так будут выглядеть ваши трек-бары

Шаг 4: Как читать и изменять размер изображения

Как читать и изменять размер изображения
Как читать и изменять размер изображения

cv2.imread () позволяет читать изображение. Важно помнить, что изображение должно находиться в той же папке, в которой сохранена программа. Мы добавим цикл while, потому что он должен работать до тех пор, пока он не прочитает изображение, или мы можем сказать, пока условие не станет истинным.

img = cv2.imread ("ferrari.jpg")

  • В этом я создал переменную с именем «img», в которой я сохраняю изображение.
  • Внутри cv2.imread напишите имя изображения с его расширением в двойных кавычках

Чтобы изменить размер изображения, мы будем использовать функцию cv2.resize. Эта часть не является обязательной, если вы хотите изменить размер, вы можете использовать эту функцию

Внутри cv2.resize сначала напишите имя переменной, в которой хранится изображение, а затем его ширину и высоту

Шаг 5. Считывание значений полосы прокрутки для их применения к изображению

Чтение значений полосы прокрутки для их применения к изображению
Чтение значений полосы прокрутки для их применения к изображению
Чтение значений полосы прокрутки для применения к изображению
Чтение значений полосы прокрутки для применения к изображению

Итак, теперь мы собираемся прочитать значения полосы трекбара, чтобы мы могли применить их к нашему изображению. Получим значения с помощью функции cv2.getTrackbarPos ().

Начнем с этой части …

h_min = cv2.getTrackbarPos ("Мин. оттенка", "Бары треков")

В приведенном выше заявлении я создаю переменную с именем h_min, в которой буду хранить значение Hue min. Итак, внутри cv2.getTrackbarPos первым аргументом будет «Hue min», потому что мне нужны значения hue min (написание должно быть точно таким же, как у функции createTrackbar), а вторым аргументом будет имя окна трекбара, которому он принадлежит.

  • Повторите тот же процесс для h_max и остальных функций, как показано на изображении выше, а затем распечатайте все значения с помощью print ().
  • Результат показан на втором изображении. Он печатает значения h_min, h_max, s_min, s_max, v_min, s_max

Шаг 6: Отображение изображения и установка верхнего и нижнего пределов

Отображение изображения и установка верхнего и нижнего пределов
Отображение изображения и установка верхнего и нижнего пределов

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

Мы создадим для этого маску с помощью функции cv2.inRange. А перед этим мы установим верхнюю и нижнюю границу оттенка, насыщенности и значения.

Итак, создайте имя переменной «lower» и с помощью функции массива numpy установите диапазон min для всех 3 следующим образом

lower = np.array ([h_min, s_min, v_min])

Повторите тот же шаг для верха

upper = np.array ([h_max, s_max, v_max])

Теперь мы создадим маску следующим образом

mask = cv2.inRange (resize, lower, upper) Внутри cv2.inRang первым аргументом будет переменная, в которой хранится мое окончательное изображение, вторым аргументом будет нижний предел, а третьим аргументом будет верхний предел.

Теперь мы собираемся отобразить основное изображение и маску. Для отображения мы будем использовать функцию cv2.imshow ()

cv2.imshow ("img", resize) Это для отображения основного изображения. 1-й аргумент - это имя окна, которому вы можете присвоить любое имя, а 2-й аргумент - это переменная, в которой хранится мое основное изображение, которое вы хотите отобразить.

Аналогично повторите шаги для маски.

cv2.imshow («Вывод», маска)

Шаг 7: Теперь последний шаг

Теперь последний шаг
Теперь последний шаг

На этом последнем шаге мы извлечем цвет автомобиля и дисплея.

Я создал результат имени переменной. Опять же, вы можете дать любое имя, какое захотите. Итак, мы будем использовать функцию cv2.bitwise_and (), в которой мы будем складывать изображения вместе и создавать новое изображение. И везде, где присутствуют пиксели на обоих изображениях, будет принято значение «да» или «1».

result = cv2.bitwise_and (изменение размера, изменение размера, маска = маска)

  • В этом первом аргументе будет наше изображение
  • Второй аргумент также будет нашим исходным изображением, но после него будет применена маска, которую мы создали ранее.
  • И, наконец, просто отобразите результат с помощью функции imshow

Просто скопируйте и вставьте этот последний шаг, это просто задержка, и вы можете выйти из окна вывода, нажав «a» на клавиатуре.

Шаг 8: Окончательные результаты

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