视频分析模块主要包含两个函数,一个是VideoAnalysis::setup(....),其主要功能就是确定测试的视频是视频文件或摄像头输入亦或是采用命令行参数;第二个函数是VideoAnalysis::start(),其主要功能初始化视频处理、设置视频获取方式以及开始视频捕获功能等。

1、VideoAnalysis::setup(....)

该函数的代码如下:

  1. bool VideoAnalysis::setup(int argc, const char **argv)
  2. {
  3. bool flag = false;
  4. const char* keys =
  5. "{hp|help|false|Print help message}"
  6. "{uf|use_file|false|Use video file}"
  7. "{fn|filename||Specify video file}"
  8. "{uc|use_cam|false|Use camera}"
  9. "{ca|camera|0|Specify camera index}"
  10. "{co|use_comp|false|Use mask comparator}"
  11. "{st|stopAt|0|Frame number to stop}"
  12. "{im|imgref||Specify image file}" ;
  13. cv::CommandLineParser cmd(argc, argv, keys);
  14. ////////////use_command
  15. if (argc <= 1 || cmd.get<bool>("help") == true)
  16. {
  17. cout << "Usage: " << argv[0] << " [options]" << endl;
  18. cout << "Avaible options:" << endl;
  19. cmd.printParams();
  20. return false;
  21. }
  22. ////////////use_file
  23. use_file = cmd.get<bool>("use_file");
  24. if (use_file)
  25. {
  26. filename = cmd.get<string>("filename");
  27. if (filename.empty())
  28. {
  29. cout << "Specify filename" << endl;
  30. return false;
  31. }
  32. flag = true;
  33. }
  34. ////////////use_camera
  35. use_camera = cmd.get<bool>("use_cam");
  36. if (use_camera)
  37. {
  38. cameraIndex = cmd.get<int>("camera");
  39. flag = true;
  40. }
  41. ////////////use_comp
  42. if (flag == true)
  43. {
  44. use_comp = cmd.get<bool>("use_comp");
  45. if (use_comp)
  46. {
  47. frameToStop = cmd.get<int>("stopAt");
  48. imgref = cmd.get<string>("imgref");
  49. if (imgref.empty())
  50. {
  51. cout << "Specify image reference" << endl;
  52. return false;
  53. }
  54. }
  55. }
  56. return flag;
  57. }

它的主要流程如下图所示:

2、VideoAnalysis::start()

该函数的代码如下:

  1. void VideoAnalysis::start()
  2. {
  3. //cout << "Press 'ESC' to stop..." << endl;
  4. do
  5. {
  6. videoCapture = new VideoCapture;
  7. frameProcessor = new FrameProcessor;
  8. frameProcessor->init();
  9. frameProcessor->frameToStop = frameToStop;
  10. frameProcessor->imgref = imgref;
  11. videoCapture->setFrameProcessor(frameProcessor);///setFrameProcessor
  12. if (use_file)
  13. videoCapture->setVideo(filename);///setVideo
  14. if (use_camera)
  15. videoCapture->setCamera(cameraIndex);///setCamera
  16. videoCapture->start();///start
  17. if (use_file || use_camera)
  18. break;
  19. frameProcessor->finish();
  20. int key = cvWaitKey(500);
  21. if (key == KEY_ESC)
  22. break;
  23. delete frameProcessor;
  24. delete videoCapture;
  25. }
  26. while (1);
  27. delete frameProcessor;
  28. delete videoCapture;
  29. }

它的主要流程如下图所示:

背景建模技术(四):视频分析(VideoAnalysis)模块的更多相关文章

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

    背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...

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

    背景减法库(BGS Library = background subtraction library)包含了37种背景建模算法,也是目前国际上关于背景建模技术研究最全也最权威的资料.本文将更加详细的介 ...

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

    前面几篇文章简单介绍了BgsLibrary的入口函数.视频分析和视频捕获模块,本文将简单介绍帧处理模块,即对每一帧进行处理的函数,也就是真正调用背景建模算法的接口处. 下面贴出源码供大家分析: #in ...

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

    预处理(PreProcessor)模块是BgsLibrary中一个必选的模块,是真正进入背景建模算法的“预处理”过程,其主要功能包括‘去模糊’.‘获得灰度图’.'应用Canny算子‘等可选模块. 下面 ...

  5. 【计算机视觉】背景建模--Vibe 算法优缺点分析

    一.Vibe 算法的优点 Vibe背景建模为运动目标检测研究邻域开拓了新思路,是一种新颖.快速及有效的运动目标检测算法.其优点有以下两点: 1.思想简单,易于实现.Vibe通常随机选取邻域20个样本为 ...

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

    本次对“视频捕获(VideoCapture)模块”做出分析,给出源代码和对应的程序流程框架. 视频捕获模块的主要功能是设置视频或相机参数,并读取设置配置参数,最后进入帧处理模块的process进程,该 ...

  7. 浅析软件工程中的UML建模技术

    一.基本信息 标题:浅析软件工程中的UML建模技术 时间:2018 出版源:电子世界 领域分类:软件工程:UML建模技术:需求分析 二.研究背景 问题定义:软件工程中UML建模技术的研究 难点:明确软 ...

  8. [MOC062066]背景建模资料收集整理

    一.相关博客 背景建模相关资料收集,各个链接都已给出. 资料,不可能非常完整,以后不定期更新. -----------------切割线----------------- 这个哥们总结的非常好啊,看完 ...

  9. 3、UML建模技术

    UML(统一建模语言)是当前软件开发中使用最为广泛的建模技术之一,通过使用UML可以构造软件系统的需求模型(用例模型).静态模型.动态模型和架构模型 UML类图 1.UML类图图示 在UML中,类使用 ...

随机推荐

  1. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

    第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/class ...

  2. [JSON].typeOf( keyPath )

    语法:[JSON].typeOf( keyPath ) 返回:[String | Number | Boolean | Json | Array |  Function | 空字符] 说明:获取指定键 ...

  3. Machine Learning笔记整理 ------ (三)基本性能度量

    1. 均方误差,错误率,精度 给定样例集 (Example set): D = {(x1, y1), (x2, y2), (x3, y3), ......, (xm, ym)} 其中xi是对应属性的值 ...

  4. Sail

    DescriptionThe polar bears are going fishing. They plan to sail from (sx,?sy) to (ex,?ey). However, ...

  5. “Hello world!”团队—选题展示

    本次选题展示内容: 一.视频展示 链接:http://v.youku.com/v_show/id_XMzA5Mzk5NjYwOA==.html?sharefrom=iphone 视频截图链接:http ...

  6. Git使用笔记一(关于如何设置密钥及提交)(Windows)

    如何设置密钥 ssh-keygen -t rsa或ssh-keygen -t rsa -C ‘邮箱’ (注意 1.-t前有一个空格:2.keygen是key generate的缩写:3.而后连续输入三 ...

  7. lintcode-42-最大子数组 II

    42-最大子数组 II 给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大. 每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [1 ...

  8. iOS开发实现UIView随着子控件的高度的变化而变化

    例子 其实看完上面的叙述,你会思考,到底什么情况下,一个UIView需要只设置坐标不设置大小呢?其实这种场景相当普遍.比如,我们常常会碰到,一个View中有两个Label,两个Label的高度均和内容 ...

  9. python获取指定长度的字符串

    from random import Random def random_str(randomlength=31): str = '' chars = 'abcdefghijklmnopqrstuvw ...

  10. Bookmark Sentry – 检查重复、删除死链书签 Chrome扩展

    Bookmark Sentry 的用处,就是 处理重复的收藏夹的死链 . 重复链收藏.具体,请百度. Bookmark Sentry 下载 :  https://files.cnblogs.com/f ...