OpenCV CommandLineParser 的用法
OpenCV CommandLineParser 的用法
去百度了一下,关键字:OpenCV CommandLineParser 发现,最多的讲解是:opencv源码解析之(5):CommandLineParser类的简单理解 链接:http://www.cnblogs.com/tornadomeet/archive/2012/04/15/2450505.html
// minimalistic foreground-background segmentation sample, based off OpenCV's bgfg_segm sample #include "BackgroundSubtractorSuBSENSE.h" #include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/video/background_segm.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h> static void help() {
printf("\nMinimalistic example of foreground-background segmentation in a video sequence using\n"
"OpenCV's BackgroundSubtractor interface; will analyze frames from the default camera\n"
"or from a specified file.\n\n"
"Usage: \n"
" ./bgfg_segm [--camera]=<use camera, true/false>, [--file]=<path to file> \n\n");
} const char* keys = {
"{c |camera |true | use camera or not}"
"{f |file |tree.avi | movie file path }"
}; int main(int argc, const char** argv) {
help();
cv::CommandLineParser parser(argc, argv, keys);
const bool bUseDefaultCamera = parser.get<bool>("camera");
const std::string sVideoFilePath = parser.get<std::string>("file");
cv::VideoCapture oVideoInput;
cv::Mat oCurrInputFrame, oCurrSegmMask, oCurrReconstrBGImg;
if(bUseDefaultCamera) {
oVideoInput.open();
oVideoInput >> oCurrInputFrame;
}
else {
oVideoInput.open(sVideoFilePath);
oVideoInput >> oCurrInputFrame;
oVideoInput.set(CV_CAP_PROP_POS_FRAMES,);
}
parser.printParams();
if(!oVideoInput.isOpened() || oCurrInputFrame.empty()) {
if(bUseDefaultCamera)
printf("Could not open default camera.\n");
else
printf("Could not open video file at '%s'.\n",sVideoFilePath.c_str());
return -;
}
oCurrSegmMask.create(oCurrInputFrame.size(),CV_8UC1);
oCurrReconstrBGImg.create(oCurrInputFrame.size(),oCurrInputFrame.type());
cv::Mat oSequenceROI(oCurrInputFrame.size(),CV_8UC1,cv::Scalar_<uchar>()); // for optimal results, pass a constrained ROI to the algorithm (ex: for CDnet, use ROI.bmp)
cv::namedWindow("input",cv::WINDOW_NORMAL);
cv::namedWindow("segmentation mask",cv::WINDOW_NORMAL);
cv::namedWindow("reconstructed background",cv::WINDOW_NORMAL);
BackgroundSubtractorSuBSENSE oBGSAlg;
oBGSAlg.initialize(oCurrInputFrame,oSequenceROI);
for(int k=;;++k) {
oVideoInput >> oCurrInputFrame;
if(oCurrInputFrame.empty())
break;
oBGSAlg(oCurrInputFrame,oCurrSegmMask,double(k<=)); // lower rate in the early frames helps bootstrap the model when foreground is present
oBGSAlg.getBackgroundImage(oCurrReconstrBGImg);
imshow("input",oCurrInputFrame);
imshow("segmentation mask",oCurrSegmMask);
imshow("reconstructed background",oCurrReconstrBGImg);
if(cv::waitKey()==)
break;
}
return ;
}
以下内容出自: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的imread用法
所有参考来自网上仅仅做学习记录用,具体正确性需要在具体项目各自验证,不涉及具体错误代码处理调试等问题,欢迎发现发现问题~ 参考: 1. https://blog.csdn.net/LiheZhu/ar ...
- opencv matchTemplate函数用法
模板匹配函数,就是在一幅图中,找到另外一幅的在本图的相似的地方 CV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ, ...
- OpenCV成长之路(8):直线、轮廓的提取与描述
基于内容的图像分析的重点是提取出图像中具有代表性的特征,而线条.轮廓.块往往是最能体现特征的几个元素,这篇文章就针对于这几个重要的图像特征,研究它们在OpenCV中的用法,以及做一些简单的基础应用. ...
- OpenCV成长之路:直线、轮廓的提取与描述
http://ronny.blog.51cto.com/8801997/1394139 OpenCV成长之路:直线.轮廓的提取与描述 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- libsvm Minist Hog 手写体识别
统计手写数字集的HOG特征 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 这篇文章是模式识别的小作业,利用sv ...
- OpenCV教程二 - Mat对象与它各种用法
学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作.很多初学者因此被搞得头晕脑胀,它各种用法太多太杂,搞得初学者应接不暇,感觉有心无力.无处下手之感.这里我们首先要正本清源, ...
- OpenCV中cv2的用法
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
- opencv学习笔记——cv::CommandLineParser函数详解
命令行解析类CommandLineParser 该类的作用主要用于命令行的解析,也就是分解命令行的作用.以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入 ...
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
随机推荐
- Oracle GoldenGate 12c中的协同交付(Coordinated Delivery)
OGG 12c中,并行交付有2种模式:集成交付.协同交付.不过集成交付只能针对目标端是oracle数据库(有版本要求)使用,而协同交付则可以在非oracle数据库上使用. 先来看2个问题, l 为什么 ...
- iOS开发XCODE5 SVN配置 使用办法
第一次弄svn版本控制,折腾了好久一直都出错!无意间看到一篇文章!貌似解决了,很感谢“代码妖娆” 的详细流程(http://blog.sina.com.cn/s/blog_68661bd80101ph ...
- 【python】import 模块、包、第三方模块
xx.py文件,称为模块(module),把不同模块归整到一起的文件夹,叫做包(package) 不同包下的模块可以重名,但是都不能和系统内建模块重名 包里面一定要有个__init__.py文件,否则 ...
- 端口占用问题——netstat命令
1.查看所有的端口占用情况 C:\>netstat -ano 协议 本地地址 外部地址 状态 PID(进程号) TCP 127.0.0.1:1434 ...
- 《Java7中 下划线的新特性》
//Java7引入了一个新功能:程序员可以在数值中使用下画线,不管是 //整形数值,还是浮点型数值,都可以自由地使用下划线.通过下划线 //分隔,可以更直观的分辨数值中到底有多少位. public c ...
- BestCoder Round #1
逃生 反向拓扑+优先队列+逆序输出 这里要注意,题中要求的不是输出字典序,而是要编号小的尽量考前(首先1尽量考前,然后2尽量考前..). 比如说 约束是 4->1,3->2,字典序答案就是 ...
- Mysql 基本操作连接数据库读取信息内容
<?php header("content-type:text/html; charset=utf-8"); // 数据库配置信息 define("DB_HOST& ...
- 树莓派安装kali后的简单配置
树莓派可以说是极客的最爱,可以根据不同的需求去做定制. 前文<使用树莓派和kali Linux打造便携式渗透套件>讲了一些使用树莓派的基础,主要侧重于将树莓派当作一个物理后门使用.我则更喜 ...
- JQuery源码分析(二)
立即调用表达式: 任何库与框架设计的第一个要点就是解决命名空间与变量污染的问题.jQuery就是利用了JavaScript函数作用域的特性,采用立即调用表达式包裹了自身的方法来解决这个问题. jQue ...
- java作业5
(一)用你的大数类实现加和减两个功能(乘除阶乘未实现) import java.util.Scanner; import java.io.IOException; import java.io.Inp ...