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
580677f4
Commit
580677f4
authored
Aug 23, 2013
by
Roman Donchenko
Committed by
OpenCV Buildbot
Aug 23, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1304 from berak:doc_tut_cascade
parents
365def60
50288f13
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
92 deletions
+71
-92
cascade_classifier.rst
...rials/objdetect/cascade_classifier/cascade_classifier.rst
+24
-25
objectDetection.cpp
...les/cpp/tutorial_code/objectDetection/objectDetection.cpp
+26
-40
objectDetection2.cpp
...es/cpp/tutorial_code/objectDetection/objectDetection2.cpp
+21
-27
No files found.
doc/tutorials/objdetect/cascade_classifier/cascade_classifier.rst
View file @
580677f4
...
...
@@ -44,36 +44,35 @@ This tutorial code's is shown lines below. You can also download it from `here <
String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;
CascadeClassifier eyes_cascade;
string window_name = "Capture - Face detection";
RNG rng(12345);
String window_name = "Capture - Face detection";
/** @function main */
int main( int argc, const char** argv
)
int main( void
)
{
CvCapture*
capture;
VideoCapture
capture;
Mat frame;
//-- 1. Load the cascades
if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading
\n"); return -1; };
if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading
\n"); return -1; };
if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading face cascade
\n"); return -1; };
if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading eyes cascade
\n"); return -1; };
//-- 2. Read the video stream
capture = cvCaptureFromCAM( -1 );
if( capture )
capture.open( -1 );
if ( ! capture.isOpened() ) { printf("--(!)Error opening video capture\n"); return -1; }
while ( capture.read(frame) )
{
while( true
)
if( frame.empty()
)
{
frame = cvQueryFrame( capture );
printf(" --(!) No captured frame -- Break!");
break;
}
//-- 3. Apply the classifier to the frame
if( !frame.empty() )
{ detectAndDisplay( frame ); }
else
{ printf(" --(!) No captured frame -- Break!"); break; }
detectAndDisplay( frame );
int c = waitKey(10);
if( (char)c == 'c' ) { break; }
}
if( (char)c == 27 ) { break; } // escape
}
return 0;
}
...
...
@@ -84,28 +83,28 @@ This tutorial code's is shown lines below. You can also download it from `here <
std::vector<Rect> faces;
Mat frame_gray;
cvtColor( frame, frame_gray, CV
_BGR2GRAY );
cvtColor( frame, frame_gray, COLOR
_BGR2GRAY );
equalizeHist( frame_gray, frame_gray );
//-- Detect faces
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR
_SCALE_IMAGE, Size(30, 30) );
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE
_SCALE_IMAGE, Size(30, 30) );
for( in
t i = 0; i < faces.size(); i++ )
for( size_
t i = 0; i < faces.size(); i++ )
{
Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5
);
ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5
), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
Point center( faces[i].x + faces[i].width/2, faces[i].y + faces[i].height/2
);
ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2
), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
Mat faceROI = frame_gray( faces[i] );
std::vector<Rect> eyes;
//-- In each face, detect eyes
eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR
_SCALE_IMAGE, Size(30, 30) );
eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CASCADE
_SCALE_IMAGE, Size(30, 30) );
for( in
t j = 0; j < eyes.size(); j++ )
for( size_
t j = 0; j < eyes.size(); j++ )
{
Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5
);
Point eye_center( faces[i].x + eyes[j].x + eyes[j].width/2, faces[i].y + eyes[j].y + eyes[j].height/2
);
int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
circle( frame,
center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
circle( frame, eye_
center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
}
}
//-- Show what you got
...
...
samples/cpp/tutorial_code/objectDetection/objectDetection.cpp
View file @
580677f4
/**
* @file objectDetection.cpp
* @author A. Huaman ( based in the classic facedetect.cpp in samples/c )
* @brief A simplified version of facedetect.cpp, show how to load a cascade classifier and how to find objects (Face + eyes) in a video stream
*/
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <stdio.h>
...
...
@@ -20,51 +12,44 @@ using namespace cv;
void
detectAndDisplay
(
Mat
frame
);
/** Global variables */
//-- Note, either copy these two files from opencv/data/haarscascades to your current folder, or change these locations
string
face_cascade_name
=
"haarcascade_frontalface_alt.xml"
;
string
eyes_cascade_name
=
"haarcascade_eye_tree_eyeglasses.xml"
;
String
face_cascade_name
=
"haarcascade_frontalface_alt.xml"
;
String
eyes_cascade_name
=
"haarcascade_eye_tree_eyeglasses.xml"
;
CascadeClassifier
face_cascade
;
CascadeClassifier
eyes_cascade
;
string
window_name
=
"Capture - Face detection"
;
RNG
rng
(
12345
);
String
window_name
=
"Capture - Face detection"
;
/**
* @function main
*/
/** @function main */
int
main
(
void
)
{
CvCapture
*
capture
;
VideoCapture
capture
;
Mat
frame
;
//-- 1. Load the cascades
if
(
!
face_cascade
.
load
(
face_cascade_name
)
){
printf
(
"--(!)Error loading
\n
"
);
return
-
1
;
};
if
(
!
eyes_cascade
.
load
(
eyes_cascade_name
)
){
printf
(
"--(!)Error loading
\n
"
);
return
-
1
;
};
if
(
!
face_cascade
.
load
(
face_cascade_name
)
){
printf
(
"--(!)Error loading face cascade
\n
"
);
return
-
1
;
};
if
(
!
eyes_cascade
.
load
(
eyes_cascade_name
)
){
printf
(
"--(!)Error loading eyes cascade
\n
"
);
return
-
1
;
};
//-- 2. Read the video stream
capture
=
cvCaptureFromCAM
(
-
1
);
if
(
capture
)
capture
.
open
(
-
1
);
if
(
!
capture
.
isOpened
()
)
{
printf
(
"--(!)Error opening video capture
\n
"
);
return
-
1
;
}
while
(
capture
.
read
(
frame
)
)
{
for
(;;
)
if
(
frame
.
empty
()
)
{
frame
=
cv
::
cvarrToMat
(
cvQueryFrame
(
capture
));
printf
(
" --(!) No captured frame -- Break!"
);
break
;
}
//-- 3. Apply the classifier to the frame
if
(
!
frame
.
empty
()
)
{
detectAndDisplay
(
frame
);
}
else
{
printf
(
" --(!) No captured frame -- Break!"
);
break
;
}
detectAndDisplay
(
frame
);
int
c
=
waitKey
(
10
);
if
(
(
char
)
c
==
'c'
)
{
break
;
}
}
if
(
(
char
)
c
==
27
)
{
break
;
}
// escape
}
return
0
;
}
/**
* @function detectAndDisplay
*/
/** @function detectAndDisplay */
void
detectAndDisplay
(
Mat
frame
)
{
std
::
vector
<
Rect
>
faces
;
...
...
@@ -72,13 +57,14 @@ void detectAndDisplay( Mat frame )
cvtColor
(
frame
,
frame_gray
,
COLOR_BGR2GRAY
);
equalizeHist
(
frame_gray
,
frame_gray
);
//-- Detect faces
face_cascade
.
detectMultiScale
(
frame_gray
,
faces
,
1.1
,
2
,
0
|
CASCADE_SCALE_IMAGE
,
Size
(
30
,
30
)
);
for
(
size_t
i
=
0
;
i
<
faces
.
size
();
i
++
)
for
(
size_t
i
=
0
;
i
<
faces
.
size
();
i
++
)
{
Point
center
(
faces
[
i
].
x
+
faces
[
i
].
width
/
2
,
faces
[
i
].
y
+
faces
[
i
].
height
/
2
);
ellipse
(
frame
,
center
,
Size
(
faces
[
i
].
width
/
2
,
faces
[
i
].
height
/
2
),
0
,
0
,
360
,
Scalar
(
255
,
0
,
255
),
2
,
8
,
0
);
ellipse
(
frame
,
center
,
Size
(
faces
[
i
].
width
/
2
,
faces
[
i
].
height
/
2
),
0
,
0
,
360
,
Scalar
(
255
,
0
,
255
),
4
,
8
,
0
);
Mat
faceROI
=
frame_gray
(
faces
[
i
]
);
std
::
vector
<
Rect
>
eyes
;
...
...
@@ -86,11 +72,11 @@ void detectAndDisplay( Mat frame )
//-- In each face, detect eyes
eyes_cascade
.
detectMultiScale
(
faceROI
,
eyes
,
1.1
,
2
,
0
|
CASCADE_SCALE_IMAGE
,
Size
(
30
,
30
)
);
for
(
size_t
j
=
0
;
j
<
eyes
.
size
();
j
++
)
for
(
size_t
j
=
0
;
j
<
eyes
.
size
();
j
++
)
{
Point
eye_center
(
faces
[
i
].
x
+
eyes
[
j
].
x
+
eyes
[
j
].
width
/
2
,
faces
[
i
].
y
+
eyes
[
j
].
y
+
eyes
[
j
].
height
/
2
);
int
radius
=
cvRound
(
(
eyes
[
j
].
width
+
eyes
[
j
].
height
)
*
0.25
);
circle
(
frame
,
eye_center
,
radius
,
Scalar
(
255
,
0
,
0
),
3
,
8
,
0
);
circle
(
frame
,
eye_center
,
radius
,
Scalar
(
255
,
0
,
0
),
4
,
8
,
0
);
}
}
//-- Show what you got
...
...
samples/cpp/tutorial_code/objectDetection/objectDetection2.cpp
View file @
580677f4
...
...
@@ -3,12 +3,9 @@
* @author A. Huaman ( based in the classic facedetect.cpp in samples/c )
* @brief A simplified version of facedetect.cpp, show how to load a cascade classifier and how to find objects (Face + eyes) in a video stream - Using LBP here
*/
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <stdio.h>
...
...
@@ -20,44 +17,41 @@ using namespace cv;
void
detectAndDisplay
(
Mat
frame
);
/** Global variables */
s
tring
face_cascade_name
=
"lbpcascade_frontalface.xml"
;
s
tring
eyes_cascade_name
=
"haarcascade_eye_tree_eyeglasses.xml"
;
S
tring
face_cascade_name
=
"lbpcascade_frontalface.xml"
;
S
tring
eyes_cascade_name
=
"haarcascade_eye_tree_eyeglasses.xml"
;
CascadeClassifier
face_cascade
;
CascadeClassifier
eyes_cascade
;
string
window_name
=
"Capture - Face detection"
;
RNG
rng
(
12345
);
String
window_name
=
"Capture - Face detection"
;
/**
* @function main
*/
int
main
(
void
)
{
CvCapture
*
capture
;
VideoCapture
capture
;
Mat
frame
;
//-- 1. Load the cascade
if
(
!
face_cascade
.
load
(
face_cascade_name
)
){
printf
(
"--(!)Error loading
\n
"
);
return
-
1
;
};
if
(
!
eyes_cascade
.
load
(
eyes_cascade_name
)
){
printf
(
"--(!)Error loading
\n
"
);
return
-
1
;
};
if
(
!
face_cascade
.
load
(
face_cascade_name
)
){
printf
(
"--(!)Error loading face cascade
\n
"
);
return
-
1
;
};
if
(
!
eyes_cascade
.
load
(
eyes_cascade_name
)
){
printf
(
"--(!)Error loading eyes cascade
\n
"
);
return
-
1
;
};
//-- 2. Read the video stream
capture
=
cvCaptureFromCAM
(
-
1
);
if
(
capture
)
capture
.
open
(
-
1
);
if
(
!
capture
.
isOpened
()
)
{
printf
(
"--(!)Error opening video capture
\n
"
);
return
-
1
;
}
while
(
capture
.
read
(
frame
)
)
{
for
(;;
)
if
(
frame
.
empty
()
)
{
frame
=
cv
::
cvarrToMat
(
cvQueryFrame
(
capture
));
printf
(
" --(!) No captured frame -- Break!"
);
break
;
}
//-- 3. Apply the classifier to the frame
if
(
!
frame
.
empty
()
)
{
detectAndDisplay
(
frame
);
}
else
{
printf
(
" --(!) No captured frame -- Break!"
);
break
;
}
detectAndDisplay
(
frame
);
//-- bail out if escape was pressed
int
c
=
waitKey
(
10
);
if
(
(
char
)
c
==
'c'
)
{
break
;
}
}
if
(
(
char
)
c
==
27
)
{
break
;
}
}
return
0
;
}
...
...
@@ -87,7 +81,7 @@ void detectAndDisplay( Mat frame )
{
//-- Draw the face
Point
center
(
faces
[
i
].
x
+
faces
[
i
].
width
/
2
,
faces
[
i
].
y
+
faces
[
i
].
height
/
2
);
ellipse
(
frame
,
center
,
Size
(
faces
[
i
].
width
/
2
,
faces
[
i
].
height
/
2
),
0
,
0
,
360
,
Scalar
(
255
,
0
,
0
),
2
,
8
,
0
);
ellipse
(
frame
,
center
,
Size
(
faces
[
i
].
width
/
2
,
faces
[
i
].
height
/
2
),
0
,
0
,
360
,
Scalar
(
255
,
0
,
0
),
2
,
8
,
0
);
for
(
size_t
j
=
0
;
j
<
eyes
.
size
();
j
++
)
{
//-- Draw the eyes
...
...
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