Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
6d3e9251
Commit
6d3e9251
authored
Aug 04, 2011
by
itsyplen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
new version of command line parser
parent
10444f4e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
107 additions
and
78 deletions
+107
-78
core.hpp
modules/core/include/opencv2/core/core.hpp
+82
-52
cmdparser.cpp
modules/core/src/cmdparser.cpp
+0
-0
bgfg_codebook.cpp
samples/c/bgfg_codebook.cpp
+25
-26
No files found.
modules/core/include/opencv2/core/core.hpp
View file @
6d3e9251
...
...
@@ -4231,78 +4231,108 @@ protected:
#endif
/*!
Command Line Parser
The class is used for reading command arguments.
Supports the following syntax:
//-k=10 --key --db=-10.11 -key1 argument --inputFile=lena.jpg
CommandLineParser parser(argc, argv);
int k = parser.get<int>("k", -1); //these methods also work
double db = parser.get<double>("db"); //with <float> and <unsigned int> type
bool key = parser.get<bool>("key"); <The method return 'true', if 'key' was defined in command line
" and it will return 'false' otherwise.>
bool key1 = parser.get<bool>("key1"); The method return 'true', if 'key' was defined in command line
" and it will return 'false' otherwise.>
string argument = parser.get<string>("0"); <If you need to take argument. It's the first parameter without '-' or '--' increment
and without value. It has index 0. The second parameter of this type will have index 1>
It also works with 'int', 'unsigned int', 'double' and 'float' types.
string inputFile = parser.get<string>("inputFile");
"\nThe CommandLineParser class is designed for command line arguments parsing\n"
"Keys map: \n"
"Before you start to work with CommandLineParser you have to create a map for keys.\n"
" It will look like this\n"
" const char* keys =\n"
" {\n"
" { s| string| 123asd |string parameter}\n"
" { d| digit | 100 |digit parameter }\n"
" { c|noCamera|false |without camera }\n"
" { 1| |some text|help }\n"
" { 2| |333 |another help }\n"
" };\n"
"Usage syntax: \n"
" \"{\" - start of parameter string.\n"
" \"}\" - end of parameter string\n"
" \"|\" - separator between short name, full name, default value and help\n"
"Supported syntax: \n"
" --key1=arg1 <If a key with '--' must has an argument\n"
" you have to assign it through '=' sign.> \n"
"<If the key with '--' doesn't have any argument, it means that it is a bool key>\n"
" -key2=arg2 <If a key with '-' must has an argument \n"
" you have to assign it through '=' sign.> \n"
"If the key with '-' doesn't have any argument, it means that it is a bool key\n"
" key3 <This key can't has any parameter> \n"
"Usage: \n"
" Imagine that the input parameters are next:\n"
" -s=string_value --digit=250 --noCamera lena.jpg 10000\n"
" CommandLineParser parser(argc, argv, keys) - create a parser object\n"
" parser.get<string>(\"s\" or \"string\") will return you first parameter value\n"
" parser.get<string>(\"s\", false or \"string\", false) will return you first parameter value\n"
" without spaces in end and begin\n"
" parser.get<int>(\"d\" or \"digit\") will return you second parameter value.\n"
" It also works with 'unsigned int', 'double', and 'float' types>\n"
" parser.get<bool>(\"c\" or \"noCamera\") will return you true .\n"
" If you enter this key in commandline>\n"
" It return you false otherwise.\n"
" parser.get<string>(\"1\") will return you the first argument without parameter (lena.jpg) \n"
" parser.get<int>(\"2\") will return you the second argument without parameter (10000)\n"
" It also works with 'unsigned int', 'double', and 'float' types \n"
*/
class
CV_EXPORTS
CommandLineParser
{
public
:
//! the default constructor
CommandLineParser
(
int
argc
,
const
char
*
argv
[]
);
//! the default constructor
CommandLineParser
(
int
argc
,
const
char
*
argv
[],
const
char
*
key_map
);
//! get parameter, if parameter is not given get default parameter
template
<
typename
_Tp
>
_Tp
get
(
const
std
::
string
&
name
,
const
_Tp
&
default_value
=
_Tp
())
//! get parameter, you can choose: delete spaces in end and begin or not
template
<
typename
_Tp
>
_Tp
get
(
const
std
::
string
&
name
,
bool
space_delete
=
true
)
{
if
(
!
has
(
name
))
{
std
::
string
str
=
getString
(
name
);
if
(
!
has
(
name
))
return
default_value
;
return
analyzeValue
<
_Tp
>
(
str
);
return
_Tp
();
}
std
::
string
str
=
getString
(
name
);
return
analizeValue
<
_Tp
>
(
str
,
space_delete
);
}
//! print short name, full name, current value and help for all params
void
printParams
();
protected
:
std
::
map
<
std
::
string
,
std
::
string
>
data
;
std
::
string
getString
(
const
std
::
string
&
name
)
const
;
std
::
map
<
std
::
string
,
std
::
vector
<
std
::
string
>
>
data
;
std
::
string
getString
(
const
std
::
string
&
name
)
;
bool
has
(
const
std
::
string
&
keys
)
const
;
bool
has
(
const
std
::
string
&
keys
)
;
template
<
typename
_Tp
>
static
_Tp
getData
(
const
std
::
string
&
str
)
{
_Tp
res
;
std
::
stringstream
s1
(
str
);
s1
>>
res
;
return
res
;
}
template
<
typename
_Tp
>
_Tp
analizeValue
(
const
std
::
string
&
str
,
bool
space_delete
=
false
);
template
<
typename
_Tp
>
_Tp
fromStringNumber
(
const
std
::
string
&
str
);
//the default conversion function for numbers
template
<
typename
_Tp
>
static
_Tp
getData
(
const
std
::
string
&
str
)
{
_Tp
res
;
std
::
stringstream
s1
(
str
);
s1
>>
res
;
return
res
;
}
template
<
typename
_Tp
>
_Tp
fromStringNumber
(
const
std
::
string
&
str
);
//the default conversion function for numbers
template
<
typename
_Tp
>
_Tp
analyzeValue
(
const
std
::
string
&
str
);
};
template
<>
CV_EXPORTS
bool
CommandLineParser
::
get
<
bool
>
(
const
std
::
string
&
name
,
const
bool
&
default_value
);
template
<>
CV_EXPORTS
std
::
string
CommandLineParser
::
analyzeValue
<
std
::
string
>
(
const
std
::
string
&
str
);
template
<>
CV_EXPORTS
bool
CommandLineParser
::
get
<
bool
>
(
const
std
::
string
&
name
,
bool
space_delete
);
template
<>
CV_EXPORTS
std
::
string
CommandLineParser
::
analizeValue
<
std
::
string
>
(
const
std
::
string
&
str
,
bool
space_delete
);
template
<>
CV_EXPORTS
int
CommandLineParser
::
analyzeValue
<
int
>
(
const
std
::
string
&
str
);
template
<>
CV_EXPORTS
int
CommandLineParser
::
analizeValue
<
int
>
(
const
std
::
string
&
str
,
bool
space_delete
);
template
<>
CV_EXPORTS
unsigned
CommandLineParser
::
analyzeValue
<
unsigned
int
>
(
const
std
::
string
&
str
);
template
<>
CV_EXPORTS
unsigned
CommandLineParser
::
analizeValue
<
unsigned
int
>
(
const
std
::
string
&
str
,
bool
space_delete
);
template
<>
CV_EXPORTS
float
CommandLineParser
::
analyzeValue
<
float
>
(
const
std
::
string
&
str
);
template
<>
CV_EXPORTS
float
CommandLineParser
::
analizeValue
<
float
>
(
const
std
::
string
&
str
,
bool
space_delete
);
template
<>
CV_EXPORTS
double
CommandLineParser
::
analyzeValue
<
double
>
(
const
std
::
string
&
str
);
template
<>
CV_EXPORTS
double
CommandLineParser
::
analizeValue
<
double
>
(
const
std
::
string
&
str
,
bool
space_delete
);
}
...
...
modules/core/src/cmdparser.cpp
View file @
6d3e9251
This diff is collapsed.
Click to expand it.
samples/c/bgfg_codebook.cpp
View file @
6d3e9251
...
...
@@ -20,25 +20,29 @@
Or: http://oreilly.com/catalog/9780596516130/
ISBN-10: 0596516134 or: ISBN-13: 978-0596516130
************************************************** */
#include "opencv2/core/core.hpp"
#include "opencv2/video/background_segm.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "opencv2/video/background_segm.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui.hpp"
using
namespace
std
;
using
namespace
cv
;
//VARIABLES for CODEBOOK METHOD:
CvBGCodeBookModel
*
model
=
0
;
const
int
NCHANNELS
=
3
;
bool
ch
[
NCHANNELS
]
=
{
true
,
true
,
true
};
// This sets what channels should be adjusted for background bounds
void
help
(
void
)
void
help
()
{
printf
(
"
\n
Learn background and find foreground using simple average and average difference learning method:
\n
"
"Originally from the book: Learning OpenCV by O'Reilly press
\n
"
"
\n
USAGE:
\n
bgfg_codebook [--nframes=300] [movie filename, else from camera]
\n
"
"
\n
USAGE:
\n
"
" bgfg_codebook [--nframes(-nf)=300] [--movie_filename(-mf)=tree.avi] [--camera(-c), use camera or not]
\n
"
"***Keep the focus on the video windows, NOT the consol***
\n\n
"
"INTERACTIVE PARAMETERS:
\n
"
"
\t
ESC,q,Q - quit the program
\n
"
...
...
@@ -65,15 +69,25 @@ void help(void)
//USAGE: ch9_background startFrameCollection# endFrameCollection# [movie filename, else from camera]
//If from AVI, then optionally add HighAvg, LowAvg, HighCB_Y LowCB_Y HighCB_U LowCB_U HighCB_V LowCB_V
//
int
main
(
int
argc
,
char
**
argv
)
const
char
*
keys
=
{
const
char
*
filename
=
0
;
"{nf|nframes |300 |frames number}"
"{c |camera |false |use the camera or not}"
"{mf|movie_file|tree.avi |used movie video file}"
};
int
main
(
int
argc
,
const
char
**
argv
)
{
help
();
CommandLineParser
parser
(
argc
,
argv
,
keys
);
int
nframesToLearnBG
=
parser
.
get
<
int
>
(
"nf"
);
bool
useCamera
=
parser
.
get
<
bool
>
(
"c"
);
string
filename
=
parser
.
get
<
string
>
(
"mf"
);
IplImage
*
rawImage
=
0
,
*
yuvImage
=
0
;
//yuvImage is for codebook method
IplImage
*
ImaskCodeBook
=
0
,
*
ImaskCodeBookCC
=
0
;
CvCapture
*
capture
=
0
;
int
c
,
n
,
nframes
=
0
;
int
nframesToLearnBG
=
300
;
model
=
cvCreateBGCodeBookModel
();
...
...
@@ -87,30 +101,15 @@ int main(int argc, char** argv)
bool
pause
=
false
;
bool
singlestep
=
false
;
for
(
n
=
1
;
n
<
argc
;
n
++
)
{
static
const
char
*
nframesOpt
=
"--nframes="
;
if
(
strncmp
(
argv
[
n
],
nframesOpt
,
strlen
(
nframesOpt
))
==
0
)
{
if
(
sscanf
(
argv
[
n
]
+
strlen
(
nframesOpt
),
"%d"
,
&
nframesToLearnBG
)
==
0
)
{
help
();
return
-
1
;
}
}
else
filename
=
argv
[
n
];
}
if
(
!
filename
)
if
(
useCamera
)
{
printf
(
"Capture from camera
\n
"
);
capture
=
cvCaptureFromCAM
(
0
);
}
else
{
printf
(
"Capture from file %s
\n
"
,
filename
);
capture
=
cvCreateFileCapture
(
filename
);
printf
(
"Capture from file %s
\n
"
,
filename
.
c_str
()
);
capture
=
cvCreateFileCapture
(
filename
.
c_str
()
);
}
if
(
!
capture
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment