MOG算法,即高斯混合模型分離算法,它使用一種經過K高斯分佈的混合來對每一個背景像素進行建模的方法(K = 3-5)算法
import numpy as np import cv2 import matplotlib.pyplot as plt cap = cv2.VideoCapture('test.mp4') fgbg = cv2.bgsegm.createBackgroundSubtractorMOG() while(1): ret, frame = cap.read() fgmask = fgbg.apply(frame) cv2.imshow('frame',fgmask) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()
MOG2算法,也是高斯混合模型分離算法,是MOG的改進算法,該算法的一個重要特徵是 它爲每一個像素選擇適當數量的高斯分佈,它能夠更好地適應不一樣場景的照明變化等.app
import numpy as np import cv2 import matplotlib.pyplot as plt cap = cv2.VideoCapture('test.mp4') fgbg = cv2.createBackgroundSubtractorMOG2() while(1): ret, frame = cap.read() fgmask = fgbg.apply(frame) cv2.imshow('frame',fgmask) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()
該算法結合統計背景圖像估計和每像素貝葉斯分割,該算法使用前幾個(默認爲120)幀進行後臺建模。它採用機率前景分割算法,使用貝葉斯推理識別可能的前景對象.在前幾幀圖像中會獲得一個黑色窗口.ide
import numpy as np import cv2 import matplotlib.pyplot as plt cap = cv2.VideoCapture('test.mp4') kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)) fgbg = cv2.bgsegm.createBackgroundSubtractorGMG() while(1): ret, frame = cap.read() fgmask = fgbg.apply(frame) fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel) cv2.imshow('frame',fgmask) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()