Today we are going to look at how you can remove the background from an image or video frames. The method is known as background subtraction in OpenCV Python.
Let’s Code it!
Background Subtraction OpenCV Python Algorithm
Import Packages
import cv2 as cv
Computer Vision and NumPy package are very important for working in OpenCV Python.
import numpy as np
If you feel uncomfortable in OpenCV Python basics have a look at OpenCV Basic Operations and Image Manipulation in OpenCV.
Capture Video for Background Subtraction OpenCV
cap = cv.VideoCapture(‘./img/vtest.avi’)
VideoCapture() is an OpenCV function in Python, It takes one parameter i.e the source of the video. 0 for Front Camera, 1 for Rear Camera, and for recorded video provide the Absolute or Relative Path.
MOG2 Background Subtraction OpenCV Python
There are two functions in OpenCV for subtraction namely MOG2 and KNN.
fgbg = cv.createBackgroundSubtractorMOG2(detectShadows=False)
If you do not want to detect shadows and remove it from the image, pass the argument detectShadows as False.
KNN Background Subtraction OpenCV Python
fgbg = cv.createBackgroundSubtractorKNN(detectShadows=False)
This is another algorithm for background subtraction, known as KNN. It also takes detect shadows argument as True or False. This OpenCV function will initialize background subtraction.
Reading Frames
ret, frame = cap.read()
Now read every frame from the video source. If retention is True it means the function successfully reads the frame from the video source.
Applying Background Subtraction in OpenCV Python
fgmask = fgbg.apply(frame)
In MOG2 and KNN background subtraction methods/steps we had created an instance of the background subtraction and the instance was named as fgbg.
Now, we will use apply() function in every frame of the video to remove the background. The apply() function takes one parameter as an argument, i.e The source image/frame from which the background has to be removed.
Showing Frames on window
The background removed image “fgmask” is then shown using the cv.imshow() function.
The Subtracted frames are shown using a while loop that is true when the program is able to read the video. So we need some logic to end the program otherwise the program will be stuck in an infinite loop.
One way to end the infinite loop is to bind the Keyboard key to the program that will break the loop.
In this case, we are binding Keyboard key ‘q’ to end the loop, and after that, all the created windows will be destroyed and the memory occupied will be released.
Note: Release the captured video that is read in the beginning, otherwise the machine’s memory will be full and the process will not work properly.
Background Subtraction OpenCV Python Code
This is the full code of the background subtraction function created in OpenCV Python.
def bs():
cap = cv.VideoCapture('./img/vtest.avi')
# fgbg = cv.createBackgroundSubtractorMOG2(detectShadows=False)
fgbg = cv.createBackgroundSubtractorKNN(detectShadows=False)
while cap.isOpened():
ret, frame = cap.read()
if frame is None:
break
fgmask = fgbg.apply(frame)
cv.imshow('Frame', frame)
cv.imshow('FG Mask', fgmask)
if cv.waitKey(30) & 0xFF == ord('q'):
break
cap.release()
cv.destroyAllWindows()
Background Subtraction GitHub
Get the Full Source Code at GitHub.
OpenCV Documentation
Look at the OpenCV Documentation for more knowledge of the functions.
OpenCV Projects
Lanes Detection
Self Driving Cars are the latest technology and it uses lanes detection for autonomous cars. Learn How you can create a lanes detection program using OpenCV Python.
Motion Detection
CCTV Cameras use Motion Detection to detect any kind of motion in the video frame. This helps in the security of the home and to detect any kind of small movement in the image from the previous image received in the form of the video source.
MOG2 Background Subtraction in OpenCV Python
fgbg = cv.createBackgroundSubtractorMOG2(detectShadows=False)
KNN Background Subtraction in OpenCV Python
fgbg = cv.createBackgroundSubtractorKNN(detectShadows=False)