我想掩盖视频中的移动物体。我发现 OpenCV 有一些内置的 BackgroundSubtractors,这可能会节省我很多时间。但是,根据官方参考,功能:
void BackgroundSubtractorMOG2::operator()(InputArray image, OutputArray fgmask, double learningRate=-1)
应该输出一个掩码 fgmask,但它没有。调用上述方法后,fgmask 变量将包含“掩码的轮廓”。这很奇怪。我想要的只是一个用白色填充的简单封闭区域(例如)来表示移动的物体。我怎么能那样做?
任何回复或建议将不胜感激。非常感谢。
这是我的代码:
int main(int argc, char *argv[])
{
cv::BackgroundSubtractorMOG2 bg = BackgroundSubtractorMOG2(30,16.0,false);
cv::VideoCapture cap(0);
cv::Mat frame, mask, _frame, _fmask;
cvNamedWindow("mask", CV_WINDOW_AUTOSIZE);
for(;;)
{
cap >> frame;
bg(frame,fmask,-1);
_frame = IplImage(frame);
_fmask = IplImage(fmask);
cvShowImage("mask", &_fmask);
if(cv::waitKey(30) >= 0) break;
}
return 0;
}
输出视频的快照是:
ps 我的工作环境是 OSX 10.8 上的 OpenCV2.4.3 和带有苹果 LLVM 编译器 4.1 的 XCode 4.5.2。