opencv提供两种BS算法:
1.基于图像分割(GMM-高斯混合模型);
2.机器学习(KNN-K近邻)。
下面是基于以上两种BS算法的示例代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture capture;
capture.open("1.avi");
if(!capture.isOpened())
{
cout << "could not find the video file ..." << endl;
return -1;
}
Mat frame;
Mat bsmaskMOG2;
Mat bsmaskKNN;
namedWindow("input video", CV_WINDOW_AUTOSIZE);
namedWindow("MOG2", CV_WINDOW_AUTOSIZE);
namedWindow("KNN", CV_WINDOW_AUTOSIZE);
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));//形态学开操作
//init BS
Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN();
while(capture.read(frame))
{
imshow("input video", frame);
//BSM MOG
pMOG2->apply(frame, bsmaskMOG2);
morphologyEx(bsmaskMOG2, bsmaskMOG2, MORPH_OPEN,kernel, Point(-1, -1));//形态学开操作去噪点
imshow("MOG2", bsmaskMOG2);
//BSM KNN
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;
}
本文介绍使用OpenCV实现背景减除的两种方法:基于高斯混合模型的图像分割(MOG2)和基于K近邻算法(KNN)。通过示例代码展示了如何运用这两种方法进行视频背景减除,并对结果进行了形态学处理以去除噪声。
&spm=1001.2101.3001.5002&articleId=71843626&d=1&t=3&u=137b8a6fe4c14e79845174045256607a)
2658

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



