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

Давайте погрузимся прямо в это.

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

pip install opencv-contrib-python pip install numpy

Если numpy не устанавливается с помощью первой команды, вы также можете написать вторую команду.

Теперь импортируем самое необходимое в наш основной файл Python.

import cv2 import numpy as np

Инициализация нашей камеры для захвата живого видео с помощью модуля VideoCapture, доступного в openCV.

cap = cv2.VideoCapture(0)

Теперь запустите цикл, который будет захватывать видео.

Теперь делаем каждый кадр, который будем анализировать с помощью нашей камеры. У нас также есть «_», который говорит, что нам не нужна переменная, мы просто хотим иметь для нее значение. Кадры считываются с заголовком функции чтения. «_» обычно имеет логическое значение, которое используется для определения того, есть ли у нас захват или нет. Кадры в основном представляют собой комбинацию пикселей в виде массивов numpy.

_, frame = cap.read() frame=np.flip(frame,axis=1)

Теперь мы будем конвертировать кадры в формат HSV из исходного цветового формата.

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

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

lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255])

Фиксация порога изображения HSV, чтобы получить только синие цвета.

mask = cv2.inRange(hsv, lower_blue, upper_blue)

Приведенная выше строка кода проверит, находятся ли следующие изображения HSV в диапазоне или нет.

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

mask_all=cv2.morphologyEx(mask,cv2.MORPH_DILATE, np.ones((3,3),np.uint8))

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

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

mask2=cv2.bitwise_not(mask) streamA = cv2.bitwise_and(frame,frame, mask= mask2)

Первая операция берет маску, полученную нами выше, и передает ее оператору bitwise_not. Поскольку маска имеет форму массива numpy, мы можем выполнить над ней побитовую операцию. Следующая операция берет полученную маску2 и выполняет побитовую операцию _and над кадрами и маской2.

Далее мы найдем точки маски, что означает точки, в которых присутствует цвет.

points = cv2.findNonZero(mask)

Он возвращает нам точку, где значения не равны нулю. Я верну нам вывод json.

Затем возьмите среднее значение этих точек с помощью функции среднего значения numpy и распечатайте точки.

avg = np.mean(points, axis=0) print(points)

Затем мы нарисуем прямоугольник, если это возможно, в точках, которые, как мы выяснили, не равны нулю.

cv2.rectangle(streamA,(points[0][0][0],points[0][0][1]),(700,700),(255,0,0),2)

Функция Rectangle содержит поток A, который мы получили после последней побитовой операции, начальные координаты из вывода json, которые мы получили из точек, конечные координаты (700,700), цвет и толщину линий прямоугольника. .

cv2.rectangle(streamA,(points[0][0][0],points[0][0][1]),(700,700),(255,0,0),2)

Теперь показываем окончательный результат с помощью метода imshow.

cv2.imshow('frame',streamA)

Наконец, устанавливаем способ, с помощью которого мы можем остановить показ живого видео после нажатия клавиши.

k = cv2.waitKey(5) & 0xFF if k == 27: break

Это в основном вырывает нас из цикла while, который мы начали выше.

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

cv2.destroyAllWindows()

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

import cv2 
import numpy as np 
cap = cv2.VideoCapture(0) 
background=0 
while(1): # Take each frame 
    _, frame = cap.read() 
    frame=np.flip(frame,axis=1) 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
    lower_blue = np.array([110,50,50])  
    upper_blue = np.array([130,255,255]) 
    mask = cv2.inRange(hsv, lower_blue, upper_blue)       mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,np.ones((3,3),np.uint8))     mask_all=cv2.morphologyEx(mask,cv2.MORPH_DILATE,np.ones((3,3),np.uint8)) mask2=cv2.bitwise_not(mask) streamA = cv2.bitwise_and(frame,frame, mask= mask2) points = cv2.findNonZero(mask) avg = np.mean(points, axis=0) print(points) cv2.rectangle(streamA,(points[0][0][0],points[0][0][1]),(700,700),(255,0,0),2) cv2.imshow('frame',streamA) k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()

Я также прикрепил репозиторий github для лучшего просмотра кода. У него также есть другой метод, который можно использовать для поиска цвета, но единственная разница в том, что этот код маскирует желаемый цвет здесь синим, но этот код покажет только желаемый цвет, остальное весь код будет замаскирован.