opencv學習筆記四十:背景消除建模
阿新 • • 發佈:2018-12-10
在很多情況下,我們需要從一段視訊中找到感興趣的目標,比如說當人進入已經打烊的超市時發出警報。為了達到這個目的,我們首先需要“學習”背景模型,然後將背景模型和當前影象進行比較,從而得到前景目標。
背景建模(Background Subtraction) 背景與前景都是相對的概念,以高速公路為例:有時我們對高速公路上來來往往的汽車感興趣,這時汽車是前景,而路面以及周圍的環境是背景;有時我們僅僅對闖入高速公路的行人感興趣,這時闖入者是前景,而包括汽車之類的其他東西又成了背景。背景建模的方式很多,或高階或簡單。不過各種背景模型都有自己適用的場合,即使是高階的背景模型也不能適用於任何場合。1.幀差
2.背景統計模型 背景統計模型是:對一段時間的背景進行統計,然後計算其統計資料(例如平均值、平均差分、標準差、均值漂移值等等),將統計資料作為背景的方法。
3.高階背景統計模型 在OpenCv還實現了兩種高階的背景統計模型,它們為別是:(1)MOG——高斯混合模型(Mixture Of Gauss);(2)KNN——K近鄰;
#include<opencv2\opencv.hpp> using namespace cv; using namespace std; int main(int arc, char** argv) { VideoCapture capture; capture.open("vtest.avi"); Mat frame, bsmaskMOG2, bsmasKNN; namedWindow("input video", CV_WINDOW_AUTOSIZE); namedWindow("MOG2", CV_WINDOW_AUTOSIZE); namedWindow("KNN", CV_WINDOW_AUTOSIZE); Ptr<BackgroundSubtractor> mog2 = createBackgroundSubtractorMOG2(); Ptr<BackgroundSubtractor> knn = createBackgroundSubtractorKNN(); while (capture.read(frame)) { imshow("input video", frame); mog2->apply(frame, bsmaskMOG2); medianBlur(bsmaskMOG2, bsmaskMOG2, 3); imshow("MOG2", bsmaskMOG2); knn->apply(frame, bsmasKNN); medianBlur(bsmasKNN, bsmasKNN, 3); imshow("KNN", bsmasKNN); char c = waitKey(100); if (c == 27) { break; } } capture.release(); waitKey(0); return 0; }