背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能

背景减法库(BGS Library = background subtraction library)包含了37种背景建模算法,也是目前国际上关于背景建模技术研究最全也最权威的资料。本文将更加详细的介绍背景减法库(BGS Library)的基本框架与入口函数main()的功能。

BGS库的整体框架在背景建模技术(二)中已经全部给出,此处从函数的角度再次给出BGS库的基本框架,有利于代码的修改与维护。

如下图所示是基于C++的BGS库的函数流程图:

接下来将会对每个函数进行更加详细的分析。

首先,先看入口函数main(),代码如下:

#include "Config.h"
#include "VideoAnalysis.h"
#include <iostream>

using namespace std;

namespace bgslibrary
{
	class Main
	{
		private:
		Main();

		public:
		static void start(int argc, const char **argv)
		{
			cout << "-----------------------------------------" << endl;
			cout << "Background Subtraction Library v1.9.2     " << endl;
			cout << "http://code.google.com/p/bgslibrary       " << endl;
			cout << "by:                                       " << endl;
			cout << "Andrews Sobral ([email protected])  " << endl;
			cout << "Optimized by:                             " << endl;
			cout << "Rui-Dong Fang(National Huaqiao University)" << endl;
			cout << "-----------------------------------------" << endl;
			cout << "Using OpenCV version " << CV_VERSION << endl;

			try
			{
				int key = KEY_ESC;

				do
				{
					VideoAnalysis* videoAnalysis = new VideoAnalysis;

					if (videoAnalysis->setup(argc, argv))	///videoAnalysis->setup(argc, argv)
					{
						videoAnalysis->start();

						cout << "Processing finished, enter:" << endl;
						cout << "R - Repeat" << endl;
						cout << "Q - Quit" << endl;

						key = cv::waitKey();
					}

					cv::destroyAllWindows();
					delete videoAnalysis;

				}
				while (key == KEY_REPEAT);
			}
			catch (const std::exception& ex)
			{
				cout << "std::exception:" << ex.what() << endl;
				return;
			}
			catch (...)
			{
				cout << "Unknow error" << endl;
				return;
			}

#ifdef WIN32
	//system("pause");
#endif
		}
	};
}

int main(int argc, const char **argv)
{
	bgslibrary::Main::start(argc, argv);
	return 0;
}

在main()函数中,除了打印出相关信息和设置waitKey()以外,主要就是调用了VIdeoAnalysis.cpp(将在下一篇博文中分析)中的videoAnalysis->setup(argc, argv)和videoAnalysis->start()。下面给出Main.cpp的代码流程图:

时间: 2024-10-25 08:22:03

背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能的相关文章

背景建模技术(一):介绍、资源下载、“背景建模库”平台搭建

背景建模技术(一):介绍.资源下载."背景建模库"平台搭建 1.介绍 视频分析与理解是一个非常活跃的研究领域,在这个研究领域(如视频监控.多媒体应用等)中,第一步要做的就是检测场景中运动的目标.而背景建模技术是检测前景最常用的技术之一,具有举足轻重的作用和研究意义. 2.资源下载 BgsLibrary的下载:BgsLibrary库 OpenCV的下载:http://opencv.org/  (推荐下载版本2.4.10) 注:PC默认已经安装VS2010. 3."背景建模库&q

背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战

背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.net/detail/frd2009041510/8691475 该软件平台中包含了37种背景建模算法,可以显示输入视频/图像.基于背景建模得到的前景和背景建模得到的背景图像,还可以显示出每种算法的计算复杂度等等.并且,测试的可以是视频.图片序列以及摄像头输入视频.其界面如下图所示: 2.BgsLibr

背景建模技术(六):帧处理(FrameProcessor)模块

前面几篇文章简单介绍了BgsLibrary的入口函数.视频分析和视频捕获模块,本文将简单介绍帧处理模块,即对每一帧进行处理的函数,也就是真正调用背景建模算法的接口处. 下面贴出源码供大家分析: #include "FrameProcessor.h" #include <iomanip> namespace bgslibrary { FrameProcessor::FrameProcessor() : firstTime(true), frameNumber(0), dura

背景建模技术(七):预处理(PreProcessor)模块

预处理(PreProcessor)模块是BgsLibrary中一个必选的模块,是真正进入背景建模算法的"预处理"过程,其主要功能包括'去模糊'.'获得灰度图'.'应用Canny算子'等可选模块. 下面给出源码: #include "PreProcessor.h" namespace bgslibrary { PreProcessor::PreProcessor() : firstTime(true), equalizeHist(false), gaussianBlu

背景建模技术(五):视频捕获(VideoCapture)模块

本次对"视频捕获(VideoCapture)模块"做出分析,给出源代码和对应的程序流程框架. 视频捕获模块的主要功能是设置视频或相机参数,并读取设置配置参数,最后进入帧处理模块的process进程,该模块的源码如下,请重点关注start()函数: #include "VideoCapture.h" namespace bgslibrary { namespace VC_ROI { IplImage* img_input1 = 0; IplImage* img_inp

背景建模技术(四):视频分析(VideoAnalysis)模块

视频分析模块主要包含两个函数,一个是VideoAnalysis::setup(....),其主要功能就是确定测试的视频是视频文件或摄像头输入亦或是采用命令行参数:第二个函数是VideoAnalysis::start(),其主要功能初始化视频处理.设置视频获取方式以及开始视频捕获功能等. 1.VideoAnalysis::setup(....) 该函数的代码如下: [cpp] view plaincopyprint? bool VideoAnalysis::setup(int argc, cons

UML基本架构建模--通用机制的通用建模技术(三)

 Modeling New Semantics 新语义建模 When you create a model using UML, you work within the rules the UML lays down. That's a good thing, because it means that you can communicate your intent without ambiguity to anyone else who knows how to read the UML.

UML基本架构建模--关联的通用建模技术(三)

 Modeling Structural Relationships 建模结构关系 When you model with dependencies or generalization relationships, you may be modeling classes that represent different levels of importance or different levels of abstraction. Given a dependency between two

UML基本架构建模--类的通用建模技术(三)

 Modeling Nonsoftware Things 构建非软件事物模型 Sometimes, the things you model may never have an analog in software. For example, the people who send invoices and the robots that automatically package orders for shipping from a warehouse might be a part of