OpenCV CommandLineParser 的用法

简介: OpenCV CommandLineParser 的用法 去百度了一下,关键字:OpenCV CommandLineParser  发现,最多的讲解是:opencv源码解析之(5):CommandLineParser类的简单理解  链接:http://www.

OpenCV CommandLineParser 的用法

去百度了一下,关键字:OpenCV CommandLineParser  发现,最多的讲解是:opencv源码解析之(5):CommandLineParser类的简单理解  链接:http://www.cnblogs.com/tornadomeet/archive/2012/04/15/2450505.html

 

 1 // minimalistic foreground-background segmentation sample, based off OpenCV's bgfg_segm sample
 2 
 3 #include "BackgroundSubtractorSuBSENSE.h"
 4 
 5 #include <opencv2/core/core.hpp>
 6 #include <opencv2/imgproc/imgproc.hpp>
 7 #include <opencv2/video/background_segm.hpp>
 8 #include <opencv2/highgui/highgui.hpp>
 9 #include <stdio.h>
10 
11 static void help() {
12     printf("\nMinimalistic example of foreground-background segmentation in a video sequence using\n"
13             "OpenCV's BackgroundSubtractor interface; will analyze frames from the default camera\n"
14             "or from a specified file.\n\n"
15             "Usage: \n"
16             "  ./bgfg_segm [--camera]=<use camera, true/false>, [--file]=<path to file> \n\n");
17 }
18 
19 const char* keys = {
20     "{c  |camera   |true     | use camera or not}"
21     "{f  |file     |tree.avi | movie file path  }"
22 };
23 
24 int main(int argc, const char** argv) {
25     help();
26     cv::CommandLineParser parser(argc, argv, keys);
27     const bool bUseDefaultCamera = parser.get<bool>("camera");
28     const std::string sVideoFilePath = parser.get<std::string>("file");
29     cv::VideoCapture oVideoInput;
30     cv::Mat oCurrInputFrame, oCurrSegmMask, oCurrReconstrBGImg;
31     if(bUseDefaultCamera) {
32         oVideoInput.open(0);
33         oVideoInput >> oCurrInputFrame;
34     }
35     else {
36         oVideoInput.open(sVideoFilePath);
37         oVideoInput >> oCurrInputFrame;
38         oVideoInput.set(CV_CAP_PROP_POS_FRAMES,0);
39     }
40     parser.printParams();
41     if(!oVideoInput.isOpened() || oCurrInputFrame.empty()) {
42         if(bUseDefaultCamera)
43             printf("Could not open default camera.\n");
44         else
45             printf("Could not open video file at '%s'.\n",sVideoFilePath.c_str());
46         return -1;
47     }
48     oCurrSegmMask.create(oCurrInputFrame.size(),CV_8UC1);
49     oCurrReconstrBGImg.create(oCurrInputFrame.size(),oCurrInputFrame.type());
50     cv::Mat oSequenceROI(oCurrInputFrame.size(),CV_8UC1,cv::Scalar_<uchar>(255)); // for optimal results, pass a constrained ROI to the algorithm (ex: for CDnet, use ROI.bmp)
51     cv::namedWindow("input",cv::WINDOW_NORMAL);
52     cv::namedWindow("segmentation mask",cv::WINDOW_NORMAL);
53     cv::namedWindow("reconstructed background",cv::WINDOW_NORMAL);
54     BackgroundSubtractorSuBSENSE oBGSAlg;
55     oBGSAlg.initialize(oCurrInputFrame,oSequenceROI);
56     for(int k=0;;++k) {
57         oVideoInput >> oCurrInputFrame;
58         if(oCurrInputFrame.empty())
59             break;
60         oBGSAlg(oCurrInputFrame,oCurrSegmMask,double(k<=100)); // lower rate in the early frames helps bootstrap the model when foreground is present
61         oBGSAlg.getBackgroundImage(oCurrReconstrBGImg);
62         imshow("input",oCurrInputFrame);
63         imshow("segmentation mask",oCurrSegmMask);
64         imshow("reconstructed background",oCurrReconstrBGImg);
65         if(cv::waitKey(1)==27)
66             break;
67     }
68     return 0;
69 }

 

以下内容出自:http://www.cnblogs.com/tornadomeet/archive/2012/04/15/2450505.html

 

第一行就是这个类的构造函数,前2个参数是命令行传过来的,第3个就是刚刚定义的keys了,keys的结构有一定规 律,比如说"{c |camera   |false    | use camera or not}" 都是用大括号和双引号引起来,然后中间的内容分成4断,用”|”分隔开,分别表示简称,文件来源,文件值和帮助语句。第二行和第三行表示打开摄像头和打开 文件,文件的文件名等都在keys指针中了。

  最后一行为打印keys中的参数,如下:

  

    大概可以看出来用这个类的好处就是很方便,因为以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参 数格式要与代码中的if语句判断内容格式一样,一不小心就输错了,很不方便。另外如果想要更改输入格式的话在主函数文件中要相应更改很多地方。现在有了这 个类,只需要改keys里面的内容就可以了,并且运行时可以直接在vs下用F5,不需要cmd命令行带参运行。最后这个类封装了很多函数,可以直接用,只 不过这个本来就是类结构的优点。

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

相关文章
|
计算机视觉
opencv图像处理:CommandLineParser类
看到有几本新的opencv书出来,梳理一下之前没看到过的知识: CommandLineParser类:可以帮助管理需要输入的命令行参数 CommandLineParser的构造函数为: CommandLineParser parser(argc,argv,keys):...
2397 0
|
20天前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
187 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
44 4
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
3月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
95 1
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
145 1
|
5月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
72 1
|
5月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
81 0
|
4月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。