Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
afa58094
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,发现更多精彩内容 >>
提交
afa58094
编写于
12月 05, 2012
作者:
V
Vladislav Vinogradov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added additional performance tests
上级
e17710c4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
295 addition
and
0 deletion
+295
-0
modules/gpu/app/nv_perf_test/CMakeLists.txt
modules/gpu/app/nv_perf_test/CMakeLists.txt
+10
-0
modules/gpu/app/nv_perf_test/im1_1280x800.jpg
modules/gpu/app/nv_perf_test/im1_1280x800.jpg
+0
-0
modules/gpu/app/nv_perf_test/im2_1280x800.jpg
modules/gpu/app/nv_perf_test/im2_1280x800.jpg
+0
-0
modules/gpu/app/nv_perf_test/main.cpp
modules/gpu/app/nv_perf_test/main.cpp
+285
-0
未找到文件。
modules/gpu/app/nv_perf_test/CMakeLists.txt
0 → 100644
浏览文件 @
afa58094
cmake_minimum_required
(
VERSION 2.8.6
)
project
(
nv_perf_test
)
find_package
(
OpenCV REQUIRED
)
include_directories
(
${
OpenCV_INCLUDE_DIR
}
)
add_executable
(
${
PROJECT_NAME
}
main.cpp
)
target_link_libraries
(
${
PROJECT_NAME
}
${
OpenCV_LIBS
}
)
modules/gpu/app/nv_perf_test/im1_1280x800.jpg
0 → 100644
浏览文件 @
afa58094
此差异由.gitattributes 抑制。
modules/gpu/app/nv_perf_test/im2_1280x800.jpg
0 → 100644
浏览文件 @
afa58094
此差异由.gitattributes 抑制。
modules/gpu/app/nv_perf_test/main.cpp
0 → 100644
浏览文件 @
afa58094
#include <cstdio>
#define HAVE_CUDA 1
#include <opencv2/core/core.hpp>
#include <opencv2/gpu/gpu.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/video.hpp>
#include <opencv2/ts/ts.hpp>
#include <opencv2/ts/ts_perf.hpp>
static
void
printOsInfo
()
{
#if defined _WIN32
# if defined _WIN64
printf
(
"[----------]
\n
[ GPU INFO ]
\t
Run on OS Windows x64.
\n
[----------]
\n
"
);
fflush
(
stdout
);
# else
printf
(
"[----------]
\n
[ GPU INFO ]
\t
Run on OS Windows x32.
\n
[----------]
\n
"
);
fflush
(
stdout
);
# endif
#elif defined linux
# if defined _LP64
printf
(
"[----------]
\n
[ GPU INFO ]
\t
Run on OS Linux x64.
\n
[----------]
\n
"
);
fflush
(
stdout
);
# else
printf
(
"[----------]
\n
[ GPU INFO ]
\t
Run on OS Linux x32.
\n
[----------]
\n
"
);
fflush
(
stdout
);
# endif
#elif defined __APPLE__
# if defined _LP64
printf
(
"[----------]
\n
[ GPU INFO ]
\t
Run on OS Apple x64.
\n
[----------]
\n
"
);
fflush
(
stdout
);
# else
printf
(
"[----------]
\n
[ GPU INFO ]
\t
Run on OS Apple x32.
\n
[----------]
\n
"
);
fflush
(
stdout
);
# endif
#endif
}
static
void
printCudaInfo
()
{
const
int
deviceCount
=
cv
::
gpu
::
getCudaEnabledDeviceCount
();
printf
(
"[----------]
\n
"
);
fflush
(
stdout
);
printf
(
"[ GPU INFO ]
\t
CUDA device count:: %d.
\n
"
,
deviceCount
);
fflush
(
stdout
);
printf
(
"[----------]
\n
"
);
fflush
(
stdout
);
for
(
int
i
=
0
;
i
<
deviceCount
;
++
i
)
{
cv
::
gpu
::
DeviceInfo
info
(
i
);
printf
(
"[----------]
\n
"
);
fflush
(
stdout
);
printf
(
"[ DEVICE ]
\t
# %d %s.
\n
"
,
i
,
info
.
name
().
c_str
());
fflush
(
stdout
);
printf
(
"[ ]
\t
Compute capability: %d.%d
\n
"
,
info
.
majorVersion
(),
info
.
minorVersion
());
fflush
(
stdout
);
printf
(
"[ ]
\t
Multi Processor Count: %d
\n
"
,
info
.
multiProcessorCount
());
fflush
(
stdout
);
printf
(
"[ ]
\t
Total memory: %d Mb
\n
"
,
static_cast
<
int
>
(
static_cast
<
int
>
(
info
.
totalMemory
()
/
1024.0
)
/
1024.0
));
fflush
(
stdout
);
printf
(
"[ ]
\t
Free memory: %d Mb
\n
"
,
static_cast
<
int
>
(
static_cast
<
int
>
(
info
.
freeMemory
()
/
1024.0
)
/
1024.0
));
fflush
(
stdout
);
if
(
!
info
.
isCompatible
())
printf
(
"[ GPU INFO ]
\t
This device is NOT compatible with current GPU module build
\n
"
);
printf
(
"[----------]
\n
"
);
fflush
(
stdout
);
}
}
int
main
(
int
argc
,
char
*
argv
[])
{
printOsInfo
();
printCudaInfo
();
perf
::
Regression
::
Init
(
"nv_perf_test"
);
perf
::
TestBase
::
Init
(
argc
,
argv
);
testing
::
InitGoogleTest
(
&
argc
,
argv
);
return
RUN_ALL_TESTS
();
}
//////////////////////////////////////////////////////////
// Tests
#define DEF_PARAM_TEST(name, ...) typedef ::perf::TestBaseWithParam< std::tr1::tuple< __VA_ARGS__ > > name
#define DEF_PARAM_TEST_1(name, param_type) typedef ::perf::TestBaseWithParam< param_type > name
DEF_PARAM_TEST_1
(
Depth
,
perf
::
MatDepth
);
PERF_TEST_P
(
Depth
,
GoodFeaturesToTrack
,
testing
::
Values
(
CV_8U
,
CV_16U
))
{
declare
.
time
(
60
);
const
int
depth
=
GetParam
();
const
int
maxCorners
=
5000
;
const
double
qualityLevel
=
0.05
;
const
int
minDistance
=
5
;
const
int
blockSize
=
3
;
const
bool
useHarrisDetector
=
true
;
const
double
k
=
0.05
;
const
std
::
string
fileName
=
"im1_1280x800.jpg"
;
cv
::
Mat
src
=
cv
::
imread
(
fileName
,
cv
::
IMREAD_GRAYSCALE
);
if
(
src
.
empty
())
FAIL
()
<<
"Unable to load source image ["
<<
fileName
<<
"]"
;
if
(
depth
!=
CV_8U
)
src
.
convertTo
(
src
,
depth
);
cv
::
Mat
mask
(
src
.
size
(),
CV_8UC1
,
cv
::
Scalar
::
all
(
1
));
mask
(
cv
::
Rect
(
0
,
0
,
100
,
100
)).
setTo
(
cv
::
Scalar
::
all
(
0
));
if
(
PERF_RUN_GPU
())
{
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
d_detector
(
maxCorners
,
qualityLevel
,
minDistance
,
blockSize
,
useHarrisDetector
,
k
);
cv
::
gpu
::
GpuMat
d_src
(
src
);
cv
::
gpu
::
GpuMat
d_mask
(
mask
);
cv
::
gpu
::
GpuMat
d_pts
;
d_detector
(
d_src
,
d_pts
,
d_mask
);
TEST_CYCLE
()
{
d_detector
(
d_src
,
d_pts
,
d_mask
);
}
}
else
{
cv
::
Mat
pts
;
cv
::
goodFeaturesToTrack
(
src
,
pts
,
maxCorners
,
qualityLevel
,
minDistance
,
mask
,
blockSize
,
useHarrisDetector
,
k
);
TEST_CYCLE
()
{
cv
::
goodFeaturesToTrack
(
src
,
pts
,
maxCorners
,
qualityLevel
,
minDistance
,
mask
,
blockSize
,
useHarrisDetector
,
k
);
}
}
SANITY_CHECK
(
0
);
}
DEF_PARAM_TEST
(
Depth_GraySource
,
perf
::
MatDepth
,
bool
);
PERF_TEST_P
(
Depth_GraySource
,
PyrLKOpticalFlowSparse
,
testing
::
Combine
(
testing
::
Values
(
CV_8U
,
CV_16U
),
testing
::
Bool
()))
{
declare
.
time
(
60
);
const
int
depth
=
std
::
tr1
::
get
<
0
>
(
GetParam
());
const
bool
graySource
=
std
::
tr1
::
get
<
1
>
(
GetParam
());
// PyrLK params
const
cv
::
Size
winSize
(
15
,
15
);
const
int
maxLevel
=
5
;
const
cv
::
TermCriteria
criteria
(
cv
::
TermCriteria
::
COUNT
+
cv
::
TermCriteria
::
EPS
,
30
,
0.01
);
// GoodFeaturesToTrack params
const
int
maxCorners
=
5000
;
const
double
qualityLevel
=
0.05
;
const
int
minDistance
=
5
;
const
int
blockSize
=
3
;
const
bool
useHarrisDetector
=
true
;
const
double
k
=
0.05
;
const
std
::
string
fileName1
=
"im1_1280x800.jpg"
;
const
std
::
string
fileName2
=
"im2_1280x800.jpg"
;
cv
::
Mat
src1
=
cv
::
imread
(
fileName1
,
graySource
?
cv
::
IMREAD_GRAYSCALE
:
cv
::
IMREAD_COLOR
);
if
(
src1
.
empty
())
FAIL
()
<<
"Unable to load source image ["
<<
fileName1
<<
"]"
;
cv
::
Mat
src2
=
cv
::
imread
(
fileName2
,
graySource
?
cv
::
IMREAD_GRAYSCALE
:
cv
::
IMREAD_COLOR
);
if
(
src2
.
empty
())
FAIL
()
<<
"Unable to load source image ["
<<
fileName2
<<
"]"
;
cv
::
Mat
gray_src
;
if
(
graySource
)
gray_src
=
src1
;
else
cv
::
cvtColor
(
src1
,
gray_src
,
cv
::
COLOR_BGR2GRAY
);
cv
::
Mat
pts
;
cv
::
goodFeaturesToTrack
(
gray_src
,
pts
,
maxCorners
,
qualityLevel
,
minDistance
,
cv
::
noArray
(),
blockSize
,
useHarrisDetector
,
k
);
if
(
depth
!=
CV_8U
)
{
src1
.
convertTo
(
src1
,
depth
);
src2
.
convertTo
(
src2
,
depth
);
}
if
(
PERF_RUN_GPU
())
{
cv
::
gpu
::
GpuMat
d_src1
(
src1
);
cv
::
gpu
::
GpuMat
d_src2
(
src2
);
cv
::
gpu
::
GpuMat
d_pts
(
pts
.
reshape
(
2
,
1
));
cv
::
gpu
::
GpuMat
d_nextPts
;
cv
::
gpu
::
GpuMat
d_status
;
cv
::
gpu
::
PyrLKOpticalFlow
d_pyrLK
;
d_pyrLK
.
winSize
=
winSize
;
d_pyrLK
.
maxLevel
=
maxLevel
;
d_pyrLK
.
iters
=
criteria
.
maxCount
;
d_pyrLK
.
useInitialFlow
=
false
;
d_pyrLK
.
sparse
(
d_src1
,
d_src2
,
d_pts
,
d_nextPts
,
d_status
);
TEST_CYCLE
()
{
d_pyrLK
.
sparse
(
d_src1
,
d_src2
,
d_pts
,
d_nextPts
,
d_status
);
}
}
else
{
cv
::
Mat
nextPts
;
cv
::
Mat
status
;
cv
::
calcOpticalFlowPyrLK
(
src1
,
src2
,
pts
,
nextPts
,
status
,
cv
::
noArray
(),
winSize
,
maxLevel
,
criteria
);
TEST_CYCLE
()
{
cv
::
calcOpticalFlowPyrLK
(
src1
,
src2
,
pts
,
nextPts
,
status
,
cv
::
noArray
(),
winSize
,
maxLevel
,
criteria
);
}
}
SANITY_CHECK
(
0
);
}
DEF_PARAM_TEST_1
(
Depth
,
perf
::
MatDepth
);
PERF_TEST_P
(
Depth
,
FarnebackOpticalFlow
,
testing
::
Values
(
CV_8U
,
CV_16U
))
{
declare
.
time
(
60
);
const
int
depth
=
GetParam
();
const
double
pyrScale
=
0.5
;
const
int
numLevels
=
6
;
const
int
winSize
=
7
;
const
int
numIters
=
15
;
const
int
polyN
=
7
;
const
double
polySigma
=
1.5
;
const
int
flags
=
cv
::
OPTFLOW_USE_INITIAL_FLOW
;
const
std
::
string
fileName1
=
"im1_1280x800.jpg"
;
const
std
::
string
fileName2
=
"im2_1280x800.jpg"
;
cv
::
Mat
src1
=
cv
::
imread
(
fileName1
,
cv
::
IMREAD_GRAYSCALE
);
if
(
src1
.
empty
())
FAIL
()
<<
"Unable to load source image ["
<<
fileName1
<<
"]"
;
cv
::
Mat
src2
=
cv
::
imread
(
fileName2
,
cv
::
IMREAD_GRAYSCALE
);
if
(
src2
.
empty
())
FAIL
()
<<
"Unable to load source image ["
<<
fileName2
<<
"]"
;
if
(
depth
!=
CV_8U
)
{
src1
.
convertTo
(
src1
,
depth
);
src2
.
convertTo
(
src2
,
depth
);
}
if
(
PERF_RUN_GPU
())
{
cv
::
gpu
::
GpuMat
d_src1
(
src1
);
cv
::
gpu
::
GpuMat
d_src2
(
src2
);
cv
::
gpu
::
GpuMat
d_u
(
src1
.
size
(),
CV_32FC1
,
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
GpuMat
d_v
(
src1
.
size
(),
CV_32FC1
,
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
FarnebackOpticalFlow
d_farneback
;
d_farneback
.
pyrScale
=
pyrScale
;
d_farneback
.
numLevels
=
numLevels
;
d_farneback
.
winSize
=
winSize
;
d_farneback
.
numIters
=
numIters
;
d_farneback
.
polyN
=
polyN
;
d_farneback
.
polySigma
=
polySigma
;
d_farneback
.
flags
=
flags
;
d_farneback
(
d_src1
,
d_src2
,
d_u
,
d_v
);
TEST_CYCLE
()
{
d_farneback
(
d_src1
,
d_src2
,
d_u
,
d_v
);
}
}
else
{
cv
::
Mat
flow
(
src1
.
size
(),
CV_32FC2
,
cv
::
Scalar
::
all
(
0
));
cv
::
calcOpticalFlowFarneback
(
src1
,
src2
,
flow
,
pyrScale
,
numLevels
,
winSize
,
numIters
,
polyN
,
polySigma
,
flags
);
TEST_CYCLE
()
{
cv
::
calcOpticalFlowFarneback
(
src1
,
src2
,
flow
,
pyrScale
,
numLevels
,
winSize
,
numIters
,
polyN
,
polySigma
,
flags
);
}
}
SANITY_CHECK
(
0
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录