Разбираю пример кода, подскажите пожалуйста как поправить чтобы найти только красные LED с фото?

Разбираю пример кода, хочу его изменить чтобы искать красные источники света, с open cv опыта нет. Помогите пожалуйста куда вписать дополнительный фильтр цвета, если это возможно.

import numpy as np
import argparse
import cv2
import imutils
from imutils import contours
import skimage
from skimage import measure
import argparse

image = cv2.imread("2.jpg")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (11, 11), 0)
thresh = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.erode(thresh, None, iterations=2)
thresh = cv2.dilate(thresh, None, iterations=4)

labels = measure.label(thresh, connectivity=1, background=0)
mask = np.zeros(thresh.shape, dtype="uint8")

for label in np.unique(labels):

    if label == 0:
        continue

    labelMask = np.zeros(thresh.shape, dtype="uint8")
    labelMask[labels == label] = 255
    numPixels = cv2.countNonZero(labelMask)

    if numPixels > 300:
        mask = cv2.add(mask, labelMask)

cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = contours.sort_contours(cnts)[0]

for (i, c) in enumerate(cnts):

    (x, y, w, h) = cv2.boundingRect(c)
    ((cX, cY), radius) = cv2.minEnclosingCircle(c)
    cv2.circle(image, (int(cX), int(cY)), int(radius),
        (0, 0, 255), 3)
    cv2.putText(image, "#{}".format(i + 1), (x, y - 15),
        cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)

Заранее спасибо!


Ответы (1 шт):

Автор решения: MBo

Я так понимаю, что вы выделили контуры неких объектов в сером изображении. Если красное нужно искать среди этих объектов, то обойдите boundingRect каждого объекта попиксельно - в ИСХОДНОМ ЦВЕТНОМ изображении, конечно. Суммируйте R, G, B компоненты их каждой точки, в конце разделите на количество пикселов в прямоугольнике - так получите грубое усреднение цвета.

После этого посмотрите на соотношение среднего R и G, B компонентов в усреднённом цвете - красного должно быть больше. Для уверенности переведите RGB в HSV и проверьте, что оттенок H находится в красном диапазоне, и при этом величина S (насыщенность) не слишком мала

→ Ссылка