opencv::BackgroundSubtraction基本原理

 

背景消除

BS算法  
    - 图像分割(GMM – 高斯混合模型)  
    - 机器学习(KNN –K个最近邻) 

 

BackgroundSubtractor (父类)
   -  BackgroundSubtractorMOG2 
   -  BackgroundSubtractorKNN

 

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char**) {
    VideoCapture capture;
    capture.open("D:/images/video_004.avi");
    if (!capture.isOpened()) {
        printf("could not find the video file...\n");
        return -1;
    }
    // create windows
    Mat frame;
    Mat bsmaskMOG2, bsmaskKNN;
    namedWindow("input video", CV_WINDOW_AUTOSIZE);
    namedWindow("MOG2", CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

    // MOG2 BS
    Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
    // KNN  BS
    Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN();
while (capture.read(frame)) { imshow("input video", frame); pMOG2->apply(frame, bsmaskMOG2); morphologyEx(bsmaskMOG2, bsmaskMOG2, MORPH_OPEN, kernel, Point(-1, -1)); imshow("MOG2", bsmaskMOG2); pKNN->apply(frame, bsmaskKNN); morphologyEx(bsmaskKNN, bsmaskKNN, MORPH_OPEN, kernel, Point(-1, -1)); imshow("KNN", bsmaskKNN); char c = waitKey(100); if (c == 27) { break; } } capture.release(); waitKey(0); return 0; }

 

posted @ 2019-10-28 16:48  osbreak  阅读(1282)  评论(0编辑  收藏  举报