Поиск цвета в обнаруженном контуре OpenCV python

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

Непосредственно сама задача: имеется код (смотреть ниже), который находит объекты при помощи метода вычитания фона. Мне необходимо найти определенный цвет в заданном контуре, который будет задаваться нижней и верхней границей цвета формата HSV.

введите сюда описание изображения

Код:

        import cv2 as cv

        cap = cv.VideoCapture('videos/1.mp4')
        fgbg = cv.bgsegm.createBackgroundSubtractorMOG()

        while True:
            ret, frame = cap.read()
            if frame is None:
                break
            fgmask = fgbg.apply(frame)
            cv.imshow('FG MASK Frame', fgmask)

            keyboard = cv.waitKey(30)
            if keyboard == 'q' or keyboard == 27:
               break
        cap.release()
        cv.destroyAllWindows()

Вопрос: как найти цвет внутри этого контура?


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

Автор решения: Max Gacrux
  import cv2 as cv

  cap = cv.VideoCapture('videos/5.mp4')

  fgbg = cv.bgsegm.createBackgroundSubtractorMOG()

  while True:
      ret, frame = cap.read()
   if frame is None:
       break

fgmask = fgbg.apply(frame)
contours, hierarchy = cv.findContours(fgmask, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
for pic, contour in enumerate(contours):
    # area = cv2.contourArea(contour)
    perimeter = cv.arcLength(contour, True)
    x, y, w, h = cv.boundingRect(contour)
    col = cv.mean(frame, fgmask)
    print(int(col[0]))

    if perimeter > 400:
        M = cv.moments(contour)
        cX = int(M["m10"] / M["m00"])
        cY = int(M["m01"] / M["m00"])
        print(f"{cX}:{cY}")
        cv.circle(frame, (cX, cY), 3, (255, 255, 255), -1)
       # cv.putText(frame, "color", (x, y), frame.FONT_HERSHEY_SIMPLEX, 0.1, (int(col[0]), int(col[1]), int(col[2])))
        cv.rectangle(frame, (x, y), (x + w, y + w), (int(col[0]), int(col[1]), int(col[2])), 2)
        print(cv.mean(frame, fgmask))
cv.imshow("Frame", frame)
keyboard = cv.waitKey(30)
if keyboard == 'q' or keyboard == 27:
    break

cap.release() cv.destroyAllWindows()

→ Ссылка