Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
44da71da
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
44da71da
编写于
8月 31, 2012
作者:
K
kir
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
removed duplicated sample (for facedetect)
上级
067744d0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
0 addition
and
163 deletion
+0
-163
samples/cpp/multicascadeclassifier.cpp
samples/cpp/multicascadeclassifier.cpp
+0
-163
未找到文件。
samples/cpp/multicascadeclassifier.cpp
已删除
100644 → 0
浏览文件 @
067744d0
// WARNING: this sample is under construction! Use it on your own risk.
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using
namespace
std
;
using
namespace
cv
;
static
void
help
()
{
cout
<<
"
\n
This program demonstrates the multi cascade recognizer. It is a generalization of facedetect sample.
\n\n
"
"Usage: ./multicascadeclassifier
\n
"
" --cascade1=<cascade_path> this is the primary trained classifier such as frontal face
\n
"
" [--cascade2=[this an optional secondary classifier such as profile face or eyes]]
\n
"
" input video or image
\n\n
"
"Example: ./multicascadeclassifier --cascade1=
\"
../../data/haarcascades/haarcascade_frontalface_alt.xml
\"
--cascade2=
\"
../../data/haarcascades/haarcascade_eye.xml
\"\n\n
"
"Using OpenCV version "
<<
CV_VERSION
<<
endl
<<
endl
;
}
void
DetectAndDraw
(
Mat
&
img
,
CascadeClassifier
&
cascade
);
String
cascadeName
=
"../../data/haarcascades/haarcascade_frontalface_alt.xml"
;
String
nestedCascadeName
=
"../../data/haarcascades/haarcascade_eye_tree_eyeglasses.xml"
;
int
main
(
int
argc
,
const
char
**
argv
)
{
CvCapture
*
capture
=
0
;
Mat
frame
,
image
;
if
(
argc
==
0
)
{
help
();
return
0
;
}
const
String
cascadeOpt
=
"--cascade1="
;
size_t
cascadeOptLen
=
cascadeOpt
.
length
();
string
inputName
;
for
(
int
i
=
1
;
i
<
argc
;
i
++
)
{
cout
<<
"Processing argument #"
<<
i
<<
": "
<<
argv
[
i
]
<<
endl
;
if
(
cascadeOpt
.
compare
(
0
,
cascadeOptLen
,
argv
[
i
],
cascadeOptLen
)
==
0
)
{
cascadeName
.
assign
(
argv
[
i
]
+
cascadeOptLen
);
cout
<<
" from which we have cascadeName= "
<<
cascadeName
<<
endl
;
}
else
if
(
argv
[
i
][
0
]
==
'-'
)
{
cerr
<<
"WARNING: Unknown option "
<<
argv
[
i
]
<<
endl
;
}
else
inputName
.
assign
(
argv
[
i
]
);
}
CascadeClassifier
cascade
;
if
(
!
cascade
.
load
(
cascadeName
)
)
{
cerr
<<
"ERROR: Could not load cascade classifier
\"
"
<<
cascadeName
<<
"
\"
"
<<
endl
;
help
();
return
-
1
;
}
if
(
inputName
.
size
()
)
{
image
=
imread
(
inputName
,
1
);
if
(
image
.
empty
()
)
{
capture
=
cvCaptureFromAVI
(
inputName
.
c_str
()
);
if
(
!
capture
)
cout
<<
"Capture from AVI don't work"
<<
endl
;
}
}
else
{
cout
<<
"Please provide input file."
<<
endl
;
return
-
1
;
}
cvNamedWindow
(
"result"
,
1
);
if
(
capture
)
{
for
(;;)
{
IplImage
*
iplImg
=
cvQueryFrame
(
capture
);
frame
=
iplImg
;
if
(
frame
.
empty
()
)
break
;
DetectAndDraw
(
frame
,
cascade
);
if
(
waitKey
(
10
)
>=
0
)
goto
_cleanup_
;
}
waitKey
(
0
);
_cleanup_:
cvReleaseCapture
(
&
capture
);
}
else
if
(
!
image
.
empty
()
)
{
DetectAndDraw
(
image
,
cascade
);
waitKey
(
0
);
}
else
{
cout
<<
"Please provide correct input file."
<<
endl
;
}
cvDestroyWindow
(
"result"
);
return
0
;
}
void
DetectAndDraw
(
Mat
&
img
,
CascadeClassifier
&
cascade
)
{
int
i
=
0
;
double
t
=
0
;
vector
<
Rect
>
faces
;
const
static
Scalar
colors
[]
=
{
CV_RGB
(
0
,
0
,
255
),
CV_RGB
(
0
,
128
,
255
),
CV_RGB
(
0
,
255
,
255
),
CV_RGB
(
0
,
255
,
0
),
CV_RGB
(
255
,
128
,
0
),
CV_RGB
(
255
,
255
,
0
),
CV_RGB
(
255
,
0
,
0
),
CV_RGB
(
255
,
0
,
255
)}
;
Mat
gray
;
Mat
frame
(
cvRound
(
img
.
rows
),
cvRound
(
img
.
cols
),
CV_8UC1
);
cvtColor
(
img
,
gray
,
CV_BGR2GRAY
);
resize
(
gray
,
frame
,
frame
.
size
(),
0
,
0
,
INTER_LINEAR
);
equalizeHist
(
frame
,
frame
);
t
=
(
double
)
cvGetTickCount
();
cascade
.
detectMultiScale
(
frame
,
faces
,
1.1
,
2
,
0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
|
CV_HAAR_SCALE_IMAGE
,
Size
(
30
,
30
)
);
t
=
(
double
)
cvGetTickCount
()
-
t
;
printf
(
"detection time = %g ms
\n
"
,
t
/
((
double
)
cvGetTickFrequency
()
*
1000.
)
);
for
(
vector
<
Rect
>::
const_iterator
r
=
faces
.
begin
();
r
!=
faces
.
end
();
r
++
,
i
++
)
{
Point
center
;
Scalar
color
=
colors
[
i
%
8
];
int
radius
;
center
.
x
=
cvRound
(
r
->
x
+
r
->
width
*
0.5
);
center
.
y
=
cvRound
(
r
->
y
+
r
->
height
*
0.5
);
radius
=
(
int
)(
cvRound
(
r
->
width
+
r
->
height
)
*
0.25
);
circle
(
img
,
center
,
radius
,
color
,
3
,
8
,
0
);
}
cv
::
imshow
(
"result"
,
img
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录