我非常新的OpenCV的,我停留在那一刻。 我处理的图像,而不是视频。 因为我会在我的项目相同的背景,我认为这将是更容易的工作,如果我能删除我的背景。 但首先,我要问的一件事。 我可以使用BackgroundSubtractorMOG2图片? 因为它是根据视频分析/运动分析称号。
我读了opencv.org的文档,并通过无数的例子/教程看了,但我仍然难以理解MOG2是如何工作的。
快速的问题:什么是历史,在参数?
所以,我写了一个简单的代码。 我得到一个前景蒙。 那么,什么是下一个步骤? 如何删除背景,只剩下我的对象? 我不应该先装我的背景,那么实际的形象,使MOG2能做的背景减法?
我使用OpenCV的2.4.11。
码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/background_segm.hpp>
using namespace cv;
using namespace std;
//global variables
int history = 1;
float varThreshold = 16;
bool bShadowDetection = true;
Mat src; //source image
Mat fgMaskMOG2; //fg mask generated by MOG2 method
Ptr<BackgroundSubtractor> pMOG2; //MOG2 Background subtractor
int main(int argc, char* argv[])
{
//create GUI windows
namedWindow("Source");
namedWindow("FG Mask MOG 2");
src = imread("bluePaper1.png", 1);
//create Background Subtractor objects
pMOG2 = new BackgroundSubtractorMOG2(history, varThreshold, bShadowDetection); //MOG2 approach
pMOG2->setInt("nmixtures", 3);
pMOG2->setDouble("fTau", 0.5);
pMOG2->operator()(src, fgMaskMOG2);
imshow("Source", src);
imshow("FG Mask MOG 2", fgMaskMOG2);
waitKey(0);
return 0;
}
图片来源:
fgMask我从MOG2得到: