Исключить часть распознавания / отслеживания объектов видео / изображения OpenCV

#python #opencv #image-recognition #hsv #video-tracking

#python #opencv #распознавание изображений #hsv #отслеживание видео

Вопрос:

Я пытаюсь отследить баскетбольный мяч с помощью короткого клипа, используя OpenCV. Я использую код, который помогает мне попытаться найти правильные верхние и нижние границы для цветового кода, но цвет шара очень похож на цвет игровых часов в нижней части видео. Как я могу отключить это в своем коде отслеживания объектов, чтобы программа не просто отслеживала часы? Я использую код из этого руководства: https://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv /

Код, в котором, я думаю, будет внесено это изменение, находится в следующем блоке:

     # find contours in the mask and initialize the current
    # (x, y) center of the ball
    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
        cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)
    center = None
    # only proceed if at least one contour was found
    if len(cnts) > 0:
        # find the largest contour in the mask, then use
        # it to compute the minimum enclosing circle and
        # centroid
        c = max(cnts, key=cv2.contourArea)
        ((x, y), radius) = cv2.minEnclosingCircle(c)
        M = cv2.moments(c)
        center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
        # only proceed if the radius meets a minimum size
        if radius > 10:
            # draw the circle and centroid on the frame,
            # then update the list of tracked points
            cv2.circle(frame, (int(x), int(y)), int(radius),
                (0, 255, 255), 2)
            cv2.circle(frame, center, 5, (0, 0, 255), -1)
 

Я знаю, что не предоставил MWE, но я не уверен, как это сделать в этом случае. Я думаю, что мой вопрос, по крайней мере, прост, если не прост.

Комментарии:

1. Вместо того, чтобы использовать самый большой контур (ср. c = max(...) ), получите самые n большие контуры, для каждого получите center уже присутствующие, и отбросьте тот, который, по-видимому, является часами ( center ‘s y будет примерно равна высоте изображения, поскольку вы указываете, что он находится внизу). Является ли «просмотр» камеры статичным или камера движется?

2. Если камера не движется, вы можете просто применить используемый вами подход, просто добавив фильтр для разделения кадров, чтобы работать только с движущимися объектами. Этот diff в основном должен работать как маска для вашего исходного изображения. Если камера почти движется, вам, возможно, придется адаптировать какой-то другой метод, например, поиск функций, которые присутствуют только, скажем, в часах, и фильтрация на основе этого.

3. @HansHirse к сожалению, камера движется, все клипы выглядят похоже на следующую ссылку: youtu.be/mhy9ow6et-I?t=235 Здесь много движущихся объектов, так что это может вызвать некоторые проблемы.