我想遮罩視頻中的移動物體。 我發現OpenCV有一些內置的BackgroundSubtractors,這可能會節省很多時間。然而,根據official reference,功能:如何使用OpenCV獲取移動物體的遮罩BackgroundSubtractorMOG2
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;
}
輸出視頻的快照是:
附:我的工作環境是OSX 10.8上的OpenCV2.4.3和蘋果LLVM編譯器4.1的XCode 4.5.2。