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
2d45af79
Commit
2d45af79
authored
Dec 12, 2012
by
marina.kolpakova
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix according to pull requests comments
parent
88c71d1b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
38 deletions
+25
-38
objdetect.hpp
modules/objdetect/include/opencv2/objdetect/objdetect.hpp
+1
-1
softcascade.cpp
modules/objdetect/src/softcascade.cpp
+24
-37
No files found.
modules/objdetect/include/opencv2/objdetect/objdetect.hpp
View file @
2d45af79
...
...
@@ -540,7 +540,7 @@ public:
// Param minScale is a minimum scale relative to the original size of the image on which cascade will be applyed.
// Param minScale is a maximum scale relative to the original size of the image on which cascade will be applyed.
// Param scales is a number of scales from minScale to maxScale.
// Param rej
factor
is used for NMS.
// Param rej
Criteria
is used for NMS.
CV_WRAP
SCascade
(
const
double
minScale
=
0.4
,
const
double
maxScale
=
5.
,
const
int
scales
=
55
,
const
int
rejCriteria
=
1
);
CV_WRAP
virtual
~
SCascade
();
...
...
modules/objdetect/src/softcascade.cpp
View file @
2d45af79
...
...
@@ -443,15 +443,8 @@ namespace {
typedef
cv
::
SCascade
::
Detection
Detection
;
typedef
std
::
vector
<
Detection
>
dvector
;
struct
NMS
{
virtual
~
NMS
(){}
virtual
void
apply
(
dvector
&
objects
)
const
=
0
;
};
struct
Confidence
Less
struct
Confidence
Gt
{
bool
operator
()(
const
Detection
&
a
,
const
Detection
&
b
)
const
{
...
...
@@ -459,44 +452,40 @@ struct ConfidenceLess
}
};
st
ruct
DollarNMS
:
public
NMS
st
atic
float
overlap
(
const
cv
::
Rect
&
a
,
const
cv
::
Rect
&
b
)
{
virtual
~
DollarNMS
(){}
int
w
=
std
::
min
(
a
.
x
+
a
.
width
,
b
.
x
+
b
.
width
)
-
std
::
max
(
a
.
x
,
b
.
x
);
int
h
=
std
::
min
(
a
.
y
+
a
.
height
,
b
.
y
+
b
.
height
)
-
std
::
max
(
a
.
y
,
b
.
y
);
static
float
overlap
(
const
cv
::
Rect
&
a
,
const
cv
::
Rect
&
b
)
{
int
w
=
std
::
min
(
a
.
x
+
a
.
width
,
b
.
x
+
b
.
width
)
-
std
::
max
(
a
.
x
,
b
.
x
);
int
h
=
std
::
min
(
a
.
y
+
a
.
height
,
b
.
y
+
b
.
height
)
-
std
::
max
(
a
.
y
,
b
.
y
);
return
(
w
<
0
||
h
<
0
)
?
0.
f
:
(
float
)(
w
*
h
);
}
return
(
w
<
0
||
h
<
0
)
?
0.
f
:
(
float
)(
w
*
h
);
}
void
DollarNMS
(
dvector
&
objects
)
{
static
const
float
DollarThreshold
=
0.65
f
;
std
::
sort
(
objects
.
begin
(),
objects
.
end
(),
ConfidenceGt
());
virtual
void
apply
(
dvector
&
objects
)
const
for
(
dvector
::
iterator
dIt
=
objects
.
begin
();
dIt
!=
objects
.
end
();
++
dIt
)
{
std
::
sort
(
objects
.
begin
(),
objects
.
end
(),
ConfidenceLess
());
for
(
dvector
::
iterator
dIt
=
objects
.
begin
();
dIt
!=
objects
.
end
();
++
dIt
)
const
Detection
&
a
=
*
dIt
;
for
(
dvector
::
iterator
next
=
dIt
+
1
;
next
!=
objects
.
end
();
)
{
const
Detection
&
a
=
*
dIt
;
for
(
dvector
::
iterator
next
=
dIt
+
1
;
next
!=
objects
.
end
();
)
{
const
Detection
&
b
=
*
next
;
const
Detection
&
b
=
*
next
;
const
float
ovl
=
overlap
(
a
.
bb
,
b
.
bb
)
/
std
::
min
(
a
.
bb
.
area
(),
b
.
bb
.
area
());
const
float
ovl
=
overlap
(
a
.
bb
,
b
.
bb
)
/
std
::
min
(
a
.
bb
.
area
(),
b
.
bb
.
area
());
if
(
ovl
>
0.65
f
)
next
=
objects
.
erase
(
next
);
else
++
next
;
}
if
(
ovl
>
DollarThreshold
)
next
=
objects
.
erase
(
next
);
else
++
next
;
}
}
}
;
}
cv
::
Ptr
<
NMS
>
createNMS
(
int
type
)
static
void
suppress
(
int
type
,
std
::
vector
<
Detection
>&
objects
)
{
CV_Assert
(
type
==
cv
::
SCascade
::
DOLLAR
);
return
cv
::
Ptr
<
NMS
>
(
new
DollarNMS
);
DollarNMS
(
objects
);
}
}
...
...
@@ -522,8 +511,7 @@ void cv::SCascade::detectNoRoi(const cv::Mat& image, std::vector<Detection>& obj
}
}
if
(
rejCriteria
!=
NO_REJECT
)
createNMS
(
rejCriteria
)
->
apply
(
objects
);
if
(
rejCriteria
!=
NO_REJECT
)
suppress
(
rejCriteria
,
objects
);
}
void
cv
::
SCascade
::
detect
(
cv
::
InputArray
_image
,
cv
::
InputArray
_rois
,
std
::
vector
<
Detection
>&
objects
)
const
...
...
@@ -572,8 +560,7 @@ void cv::SCascade::detect(cv::InputArray _image, cv::InputArray _rois, std::vect
}
}
if
(
rejCriteria
!=
NO_REJECT
)
createNMS
(
rejCriteria
)
->
apply
(
objects
);
if
(
rejCriteria
!=
NO_REJECT
)
suppress
(
rejCriteria
,
objects
);
}
void
cv
::
SCascade
::
detect
(
InputArray
_image
,
InputArray
_rois
,
OutputArray
_rects
,
OutputArray
_confs
)
const
...
...
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