ビデオから動くオブジェクトをマスクしたい。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私の作業環境は、OSX10.8上のOpenCV2.4.3およびAppleLLVMコンパイラ4.1を備えたXCode4.5.2です。