视频分析模块主要包含两个函数,一个是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. NGUI组件整理总结

    一图流: 注意: private void RClickUI(Vector3 newPos) { this.gameObject.SetActive(true); this.transform.loc ...

  2. linux系统简单命令

    # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...

  3. 【递归入门】组合的输出:dfs

    题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. 现要求你不用递归的方 ...

  4. LeetCode 102 ——二叉树的层次遍历

    1. 题目 2. 解答 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level_data 和一个存放每一层节点的队列 node_queue. 如果根节点非空,根节点进队,然后循 ...

  5. 改maven下创建的动态网站依赖的jre版本

    问题描述 通过maven创建一个动态网站后,eclipse会提示一个提醒 Build path specifies execution environment J2SE-1.5. There are ...

  6. 【转】自定义(滑动条)input[type="range"]样式

    1.如何使用滑动条? 用法很简单,如下所示: <input type="range" value="0"> 各浏览器原始样式如下: Chrome:  ...

  7. DAY1敏捷冲刺

    站立式会议 工作安排 (1)服务器配置 (2)数据库建表 (3)页面初步样式设计 (4)主要页面之间的交互 燃尽图 代码提交记录 感想 林一心:后端云服务器的配置确实是一个挑战,目前还在摸索中 赵意: ...

  8. Mysql8 忘记Root密码(转)

    第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1.2 在 [mysqld]最后加上如下语句 并保持退出文件: skip-grant-tables 1.3 重启mysql服务 ...

  9. Jenkins系列-Jenkins介绍与部署

    Jenkins是什么? Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测 ...

  10. mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句

    正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 .如下: 表字段和数据: SQL语句: [sql] view plain cop ...