Exemple #1
0
int main(int argc, char** argv)
{
    VideoCapture cap;
    bool update_bg_model = true;

    help();

    if( argc < 2 )
        cap.open(0);
    else
        cap.open(std::string(argv[1]));

    if( !cap.isOpened() )
    {
        printf("\nCan not open camera or video file\n");
        return -1;
    }

    Mat tmp_frame, bgmask, out_frame;

    cap >> tmp_frame;
    if(!tmp_frame.data)
    {
        printf("can not read data from the video source\n");
        return -1;
    }

    namedWindow("video", 1);
    namedWindow("segmented", 1);

    BackgroundSubtractorMOG bgsubtractor;
    bgsubtractor.set("noiseSigma", 10);

    for(;;)
    {
        cap >> tmp_frame;
        if( !tmp_frame.data )
            break;
        bgsubtractor(tmp_frame, bgmask, update_bg_model ? -1 : 0);
        //CvMat _bgmask = bgmask;
        //cvSegmentFGMask(&_bgmask);
        refineSegments(tmp_frame, bgmask, out_frame);
        imshow("video", tmp_frame);
        imshow("segmented", out_frame);
        int keycode = waitKey(30);
        if( keycode == 27 )
            break;
        if( keycode == ' ' )
        {
            update_bg_model = !update_bg_model;
            printf("Learn background is in state = %d\n",update_bg_model);
        }
    }

    return 0;
}
//-----------------------------------【main( )函数】--------------------------------------------
//		描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main(int argc, char** argv)
{
	VideoCapture cap;
	bool update_bg_model = true;

	help();

	cap.open("1.avi");

	if( !cap.isOpened() )
	{
		printf("\nCan not open camera or video file\n");
		return -1;
	}

	Mat tmp_frame, bgmask, out_frame;

	cap >> tmp_frame;
	if(!tmp_frame.data)
	{
		printf("can not read data from the video source\n");
		return -1;
	}

	namedWindow("video", 1);
	namedWindow("segmented", 1);

	BackgroundSubtractorMOG bgsubtractor;
	bgsubtractor.set("noiseSigma", 10);

	for(;;)
	{
		cap >> tmp_frame;
		if( !tmp_frame.data )
			break;
		bgsubtractor(tmp_frame, bgmask, update_bg_model ? -1 : 0);
		refineSegments(tmp_frame, bgmask, out_frame);
		imshow("video", tmp_frame);
		imshow("segmented", out_frame);
		int keycode = waitKey(1);
		if( keycode == 27 )
			break;
		if( keycode == ' ' )
		{
			update_bg_model = !update_bg_model;
			printf("\n\t>‘背景学习’技术的状态 = %d\n",update_bg_model);
		}
	}

	return 0;
}