zoukankan      html  css  js  c++  java
  • 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...
    ");
            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; }
  • 相关阅读:
    数据库设计 一对多 多对多 无限级菜单 设计方法
    线程创建的四种方式
    Linux常用指令---grep(搜索过滤)
    Netty4实战
    linux查找日志技巧
    javascript---关于字符串和数组的方法
    angularJs---route
    JavaScript---详解scroll
    JavaScript--location
    socket中 emit和on的写法
  • 原文地址:https://www.cnblogs.com/osbreak/p/11753366.html
Copyright © 2011-2022 走看看