1. 基本原理


BSM适用于背景不变的情况下。
2. 相关API

3. 代码演示
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture capture;
capture.open("E:/技能学习/Opencv视频分析与对象跟踪/video_003.avi");
if (!capture.isOpened())
{
cout << "could not find the video file..." << endl;
return -1;
}
Mat frame;
Mat bsmaskMOG2, bsmaskKNN;
namedWindow("input video", WINDOW_AUTOSIZE);
namedWindow("MOG2", WINDOW_AUTOSIZE);
namedWindow("KNN", WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
//图像分割(GMM - 高斯混合模型)背景建模
Ptr<BackgroundSubtractor>pMOG2 = createBackgroundSubtractorMOG2();
//机器学习(KNN - K个最近邻)背景建模
Ptr<BackgroundSubtractor>pKNN = createBackgroundSubtractorKNN();
while (capture.read(frame))
{
imshow("input video", frame);
//MOG BS
pMOG2->apply(frame, bsmaskMOG2);
morphologyEx(bsmaskMOG2, bsmaskMOG2, MORPH_OPEN, kernel, Point(-1, -1)); //形态学开操作
imshow("MOG2", bsmaskMOG2);
//KNN BS mask
pKNN->apply(frame, bsmaskKNN, -1);
imshow("KNN", bsmaskKNN);
char c = waitKey(50);
if (c == 27)
{
break;
}
}
capture.release();
waitKey(0);
destroyAllWindows();
return 0;
}
该博客介绍了OpenCV库中两种背景 subtractor 方法的使用:基于高斯混合模型(MOG2)和K个最近邻(KNN)。通过代码演示,展示了如何利用这两种方法对视频帧进行背景建模和前景物体检测,包括API调用和形态学操作。
3072

被折叠的 条评论
为什么被折叠?



