Pull to refresh

Comments 8

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

Разве не для таких задач она создавалась?

Можно вообще контуры не использовать.

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

Давайте сделаем скидку на то, что это перевод, а переводчик, как известно, аналитикой не блещет. Однако, стоит отметить, что OpenCV в своем составе имеет готоые к использованию функции вычисления фона/объектов.

Например, MOG2:

https://dev.to/azure/opencv-background-subtraction-in-a-camera-feed-using-mog2-3dg8

import cv2

backSub_mog = cv2.createBackgroundSubtractorMOG2()

# open camera 
cap = cv2.VideoCapture(1)

while True:
    # read image
    ret, img = cap.read()

    #resize office to 640x480
    img = cv2.resize(img, (320, 240))
    imgNoBg =  backSub_mog.apply(img)

    # show both images
    cv2.imshow('office',img)
    cv2.imshow('office no bg MOG2',imgNoBg)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# close camera
cap.release()
cv2.destroyAllWindows()

И, например, MOG2 очень неплохо работает на CUDA - 1000 FPS на 4060 Laptop легко. В работе: https://www.youtube.com/watch?v=P9w-WS6HLew&ab_channel=IvanKud

Справедливости для... В этой же статье написано:

Для вычитания фона мы создали другой объект, используя cv2.createBackgroundSubtractorMOG2.

Интересно, а что будет при наличии дыма местами? Контраст-то падает.

Есть ещё одна проблема - сжатие видеопотока, из-за этого фон каждый раз чуть-чуть разный

Sign up to leave a comment.

Articles