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

视频分析模块主要包含两个函数,一个是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. }

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

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

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)模块

上一篇:iOS开发中涉及的字体问题


下一篇:[Luogu4916]魔力环[Burnside引理、组合计数、容斥]