Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
33fc46cd
O
Opencv
项目概览
Greenplum
/
Opencv
10 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
33fc46cd
编写于
1月 16, 2014
作者:
V
vbystricky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Validate parameters for using OpenCL version, before upload UMat
上级
4152135e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
42 deletion
+40
-42
modules/core/src/ocl.cpp
modules/core/src/ocl.cpp
+2
-0
modules/video/src/lkpyramid.cpp
modules/video/src/lkpyramid.cpp
+30
-34
modules/video/test/ocl/test_optflowpyrlk.cpp
modules/video/test/ocl/test_optflowpyrlk.cpp
+8
-8
未找到文件。
modules/core/src/ocl.cpp
浏览文件 @
33fc46cd
...
...
@@ -3841,6 +3841,8 @@ struct Image2D::Impl
{
Impl
(
const
UMat
&
src
)
{
handle
=
0
;
refcount
=
1
;
init
(
src
);
}
~
Impl
()
...
...
modules/video/src/lkpyramid.cpp
浏览文件 @
33fc46cd
...
...
@@ -611,47 +611,34 @@ namespace cv
//getMinEigenVals = false;
}
bool
sparse
(
const
UMat
&
prevImg
,
const
UMat
&
nextImg
,
const
UMat
&
prevPts
,
UMat
&
nextPts
,
UMat
&
status
,
UMat
&
err
)
bool
checkParam
(
)
{
if
(
prevPts
.
empty
())
{
nextPts
.
release
();
status
.
release
();
return
false
;
}
iters
=
std
::
min
(
std
::
max
(
iters
,
0
),
100
);
derivLambda
=
std
::
min
(
std
::
max
(
derivLambda
,
0.0
),
1.0
);
if
(
derivLambda
<
0
)
return
false
;
if
(
maxLevel
<
0
||
winSize
.
width
<=
2
||
winSize
.
height
<=
2
)
return
false
;
iters
=
std
::
min
(
std
::
max
(
iters
,
0
),
100
);
if
(
prevPts
.
rows
!=
1
||
prevPts
.
type
()
!=
CV_32FC2
)
return
false
;
dim3
patch
;
calcPatchSize
(
patch
);
if
(
patch
.
x
<=
0
||
patch
.
x
>=
6
||
patch
.
y
<=
0
||
patch
.
y
>=
6
)
return
false
;
if
(
!
initWaveSize
())
return
false
;
if
(
useInitialFlow
)
{
if
(
nextPts
.
size
()
!=
prevPts
.
size
()
||
nextPts
.
type
()
!=
CV_32FC2
)
return
false
;
}
else
ensureSizeIsEnough
(
1
,
prevPts
.
cols
,
prevPts
.
type
(),
nextPts
)
;
return
true
;
}
bool
sparse
(
const
UMat
&
prevImg
,
const
UMat
&
nextImg
,
const
UMat
&
prevPts
,
UMat
&
nextPts
,
UMat
&
status
,
UMat
&
err
)
{
if
(
!
checkParam
())
return
false
;
UMat
temp1
=
(
useInitialFlow
?
nextPts
:
prevPts
).
reshape
(
1
);
UMat
temp2
=
nextPts
.
reshape
(
1
);
multiply
(
1.0
f
/
(
1
<<
maxLevel
)
/
2.0
f
,
temp1
,
temp2
);
ensureSizeIsEnough
(
1
,
prevPts
.
cols
,
CV_8UC1
,
status
);
status
.
setTo
(
Scalar
::
all
(
1
));
ensureSizeIsEnough
(
1
,
prevPts
.
cols
,
CV_32FC1
,
err
);
// build the image pyramids.
std
::
vector
<
UMat
>
prevPyr
;
prevPyr
.
resize
(
maxLevel
+
1
);
std
::
vector
<
UMat
>
nextPyr
;
nextPyr
.
resize
(
maxLevel
+
1
);
...
...
@@ -668,9 +655,10 @@ namespace cv
// dI/dx ~ Ix, dI/dy ~ Iy
for
(
int
level
=
maxLevel
;
level
>=
0
;
level
--
)
{
lkSparse_run
(
prevPyr
[
level
],
nextPyr
[
level
],
prevPts
,
nextPts
,
status
,
err
,
prevPts
.
cols
,
level
,
patch
);
if
(
!
lkSparse_run
(
prevPyr
[
level
],
nextPyr
[
level
],
prevPts
,
nextPts
,
status
,
err
,
prevPts
.
cols
,
level
,
patch
))
return
false
;
}
return
true
;
}
...
...
@@ -707,6 +695,7 @@ namespace cv
}
private:
int
waveSize
;
dim3
patch
;
bool
initWaveSize
()
{
waveSize
=
1
;
...
...
@@ -764,13 +753,6 @@ namespace cv
{
return
(
cv
::
ocl
::
Device
::
TYPE_CPU
==
cv
::
ocl
::
Device
::
getDefault
().
type
());
}
inline
static
void
ensureSizeIsEnough
(
int
rows
,
int
cols
,
int
type
,
UMat
&
m
)
{
if
(
m
.
type
()
==
type
&&
m
.
rows
>=
rows
&&
m
.
cols
>=
cols
)
m
=
m
(
Rect
(
0
,
0
,
cols
,
rows
));
else
m
.
create
(
rows
,
cols
,
type
);
}
};
...
...
@@ -794,19 +776,33 @@ namespace cv
if
((
0
!=
CV_MAT_DEPTH
(
typePrev
))
||
(
0
!=
CV_MAT_DEPTH
(
typeNext
)))
return
false
;
if
(
_prevPts
.
empty
()
||
_prevPts
.
size
().
height
!=
1
||
_prevPts
.
type
()
!=
CV_32FC2
)
return
false
;
bool
useInitialFlow
=
(
0
!=
(
flags
&
OPTFLOW_USE_INITIAL_FLOW
));
if
(
useInitialFlow
)
{
if
(
_nextPts
.
size
()
!=
_prevPts
.
size
()
||
_nextPts
.
type
()
!=
CV_32FC2
)
return
false
;
}
PyrLKOpticalFlow
opticalFlow
;
opticalFlow
.
winSize
=
winSize
;
opticalFlow
.
maxLevel
=
maxLevel
;
opticalFlow
.
iters
=
criteria
.
maxCount
;
opticalFlow
.
derivLambda
=
criteria
.
epsilon
;
opticalFlow
.
useInitialFlow
=
(
0
!=
(
flags
&
OPTFLOW_USE_INITIAL_FLOW
));
opticalFlow
.
useInitialFlow
=
useInitialFlow
;
if
(
!
opticalFlow
.
checkParam
())
return
false
;
UMat
umatErr
;
if
(
_err
.
needed
())
{
_err
.
create
(
_prevPts
.
size
(),
CV_
8U
C1
);
_err
.
create
(
_prevPts
.
size
(),
CV_
32F
C1
);
umatErr
=
_err
.
getUMat
();
}
else
umatErr
.
create
(
_prevPts
.
size
(),
CV_32FC1
);
_nextPts
.
create
(
_prevPts
.
size
(),
_prevPts
.
type
());
_status
.
create
(
_prevPts
.
size
(),
CV_8UC1
);
...
...
modules/video/test/ocl/test_optflowpyrlk.cpp
浏览文件 @
33fc46cd
...
...
@@ -86,10 +86,10 @@ OCL_TEST_P(PyrLKOpticalFlow, Mat)
std
::
vector
<
cv
::
Point2f
>
pts
;
cv
::
goodFeaturesToTrack
(
frame0
,
pts
,
1000
,
0.01
,
0.0
);
std
::
vector
<
cv
::
Point2f
>
nextPtsCPU
;
std
::
vector
<
unsigned
char
>
s
tatusCPU
;
std
::
vector
<
float
>
errCPU
;
OCL_OFF
(
cv
::
calcOpticalFlowPyrLK
(
frame0
,
frame1
,
pts
,
nextPtsCPU
,
statusCPU
,
errCPU
,
winSize
,
maxLevel
,
criteria
,
flags
,
minEigThreshold
));
std
::
vector
<
cv
::
Point2f
>
cpuNextPts
;
std
::
vector
<
unsigned
char
>
cpuS
tatusCPU
;
std
::
vector
<
float
>
cpuErr
;
OCL_OFF
(
cv
::
calcOpticalFlowPyrLK
(
frame0
,
frame1
,
pts
,
cpuNextPts
,
cpuStatusCPU
,
cpuErr
,
winSize
,
maxLevel
,
criteria
,
flags
,
minEigThreshold
));
UMat
umatNextPts
,
umatStatus
,
umatErr
;
OCL_ON
(
cv
::
calcOpticalFlowPyrLK
(
umatFrame0
,
umatFrame1
,
pts
,
umatNextPts
,
umatStatus
,
umatErr
,
winSize
,
maxLevel
,
criteria
,
flags
,
minEigThreshold
));
...
...
@@ -97,13 +97,13 @@ OCL_TEST_P(PyrLKOpticalFlow, Mat)
std
::
vector
<
unsigned
char
>
status
;
umatStatus
.
copyTo
(
status
);
std
::
vector
<
float
>
err
;
umatErr
.
copyTo
(
err
);
ASSERT_EQ
(
nextPtsCPU
.
size
(),
nextPts
.
size
());
ASSERT_EQ
(
s
tatusCPU
.
size
(),
status
.
size
());
ASSERT_EQ
(
cpuNextPts
.
size
(),
nextPts
.
size
());
ASSERT_EQ
(
cpuS
tatusCPU
.
size
(),
status
.
size
());
size_t
mistmatch
=
0
;
for
(
size_t
i
=
0
;
i
<
nextPts
.
size
();
++
i
)
{
if
(
status
[
i
]
!=
s
tatusCPU
[
i
])
if
(
status
[
i
]
!=
cpuS
tatusCPU
[
i
])
{
++
mistmatch
;
continue
;
...
...
@@ -112,7 +112,7 @@ OCL_TEST_P(PyrLKOpticalFlow, Mat)
if
(
status
[
i
])
{
cv
::
Point2i
a
=
nextPts
[
i
];
cv
::
Point2i
b
=
nextPtsCPU
[
i
];
cv
::
Point2i
b
=
cpuNextPts
[
i
];
bool
eq
=
std
::
abs
(
a
.
x
-
b
.
x
)
<
1
&&
std
::
abs
(
a
.
y
-
b
.
y
)
<
1
;
float
errdiff
=
0.0
f
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录