Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
70e6dc61
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,发现更多精彩内容 >>
提交
70e6dc61
编写于
4月 30, 2013
作者:
V
Vladislav Vinogradov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactored GoodFeaturesToTrackDetector
上级
d7ff3ad0
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
142 addition
and
140 deletion
+142
-140
modules/gpu/perf4au/main.cpp
modules/gpu/perf4au/main.cpp
+3
-3
modules/gpuimgproc/include/opencv2/gpuimgproc.hpp
modules/gpuimgproc/include/opencv2/gpuimgproc.hpp
+5
-42
modules/gpuimgproc/perf/perf_gftt.cpp
modules/gpuimgproc/perf/perf_gftt.cpp
+2
-2
modules/gpuimgproc/src/gftt.cpp
modules/gpuimgproc/src/gftt.cpp
+117
-80
modules/gpuimgproc/test/test_gftt.cpp
modules/gpuimgproc/test/test_gftt.cpp
+5
-5
modules/videostab/include/opencv2/videostab/global_motion.hpp
...les/videostab/include/opencv2/videostab/global_motion.hpp
+1
-1
modules/videostab/src/global_motion.cpp
modules/videostab/src/global_motion.cpp
+3
-1
samples/gpu/performance/tests.cpp
samples/gpu/performance/tests.cpp
+3
-3
samples/gpu/pyrlk_optical_flow.cpp
samples/gpu/pyrlk_optical_flow.cpp
+3
-3
未找到文件。
modules/gpu/perf4au/main.cpp
浏览文件 @
70e6dc61
...
...
@@ -148,17 +148,17 @@ PERF_TEST_P(Image_Depth, GoodFeaturesToTrack,
if
(
PERF_RUN_GPU
())
{
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
d_detector
(
maxCorners
,
qualityLevel
,
minDistance
,
blockSize
,
useHarrisDetector
,
k
);
cv
::
Ptr
<
cv
::
gpu
::
CornersDetector
>
detector
=
cv
::
gpu
::
createGoodFeaturesToTrackDetector
(
src
.
type
(),
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
);
d
etector
->
detect
(
d_src
,
d_pts
,
d_mask
);
TEST_CYCLE
()
{
d
_detector
(
d_src
,
d_pts
,
d_mask
);
d
etector
->
detect
(
d_src
,
d_pts
,
d_mask
);
}
}
else
...
...
modules/gpuimgproc/include/opencv2/gpuimgproc.hpp
浏览文件 @
70e6dc61
...
...
@@ -394,54 +394,17 @@ inline void cornerMinEigenVal(InputArray src, OutputArray dst, int blockSize, in
gpu
::
createMinEigenValCorner
(
src
.
type
(),
blockSize
,
ksize
,
borderType
)
->
compute
(
src
,
dst
,
stream
);
}
//////////////////////////
Feature
Detection ///////////////////////////
//////////////////////////
Corners
Detection ///////////////////////////
class
CV_EXPORTS
GoodFeaturesToTrackDetector_GPU
class
CV_EXPORTS
CornersDetector
:
public
Algorithm
{
public:
explicit
GoodFeaturesToTrackDetector_GPU
(
int
maxCorners
=
1000
,
double
qualityLevel
=
0.01
,
double
minDistance
=
0.0
,
int
blockSize
=
3
,
bool
useHarrisDetector
=
false
,
double
harrisK
=
0.04
);
//! return 1 rows matrix with CV_32FC2 type
void
operator
()(
const
GpuMat
&
image
,
GpuMat
&
corners
,
const
GpuMat
&
mask
=
GpuMat
());
int
maxCorners
;
double
qualityLevel
;
double
minDistance
;
int
blockSize
;
bool
useHarrisDetector
;
double
harrisK
;
void
releaseMemory
()
{
Dx_
.
release
();
Dy_
.
release
();
buf_
.
release
();
eig_
.
release
();
minMaxbuf_
.
release
();
tmpCorners_
.
release
();
}
private:
GpuMat
Dx_
;
GpuMat
Dy_
;
GpuMat
buf_
;
GpuMat
eig_
;
GpuMat
minMaxbuf_
;
GpuMat
tmpCorners_
;
virtual
void
detect
(
InputArray
image
,
OutputArray
corners
,
InputArray
mask
=
noArray
())
=
0
;
};
inline
GoodFeaturesToTrackDetector_GPU
::
GoodFeaturesToTrackDetector_GPU
(
int
maxCorners_
,
double
qualityLevel_
,
double
minDistance_
,
int
blockSize_
,
bool
useHarrisDetector_
,
double
harrisK_
)
{
maxCorners
=
maxCorners_
;
qualityLevel
=
qualityLevel_
;
minDistance
=
minDistance_
;
blockSize
=
blockSize_
;
useHarrisDetector
=
useHarrisDetector_
;
harrisK
=
harrisK_
;
}
CV_EXPORTS
Ptr
<
CornersDetector
>
createGoodFeaturesToTrackDetector
(
int
srcType
,
int
maxCorners
=
1000
,
double
qualityLevel
=
0.01
,
double
minDistance
=
0.0
,
int
blockSize
=
3
,
bool
useHarrisDetector
=
false
,
double
harrisK
=
0.04
);
///////////////////////////// Mean Shift //////////////////////////////
...
...
modules/gpuimgproc/perf/perf_gftt.cpp
浏览文件 @
70e6dc61
...
...
@@ -66,12 +66,12 @@ PERF_TEST_P(Image_MinDistance, GoodFeaturesToTrack,
if
(
PERF_RUN_GPU
())
{
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
d_detector
(
maxCorners
,
qualityLevel
,
minDistance
);
cv
::
Ptr
<
cv
::
gpu
::
CornersDetector
>
d_detector
=
cv
::
gpu
::
createGoodFeaturesToTrackDetector
(
image
.
type
(),
maxCorners
,
qualityLevel
,
minDistance
);
const
cv
::
gpu
::
GpuMat
d_image
(
image
);
cv
::
gpu
::
GpuMat
pts
;
TEST_CYCLE
()
d_detector
(
d_image
,
pts
);
TEST_CYCLE
()
d_detector
->
detect
(
d_image
,
pts
);
GPU_SANITY_CHECK
(
pts
);
}
...
...
modules/gpuimgproc/src/gftt.cpp
浏览文件 @
70e6dc61
...
...
@@ -45,9 +45,9 @@
using
namespace
cv
;
using
namespace
cv
::
gpu
;
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
|| !defined(HAVE_OPENCV_GPUARITHM)
void
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
::
operator
()(
const
GpuMat
&
,
GpuMat
&
,
const
GpuMat
&
)
{
throw_no_cuda
();
}
Ptr
<
gpu
::
CornersDetector
>
cv
::
gpu
::
createGoodFeaturesToTrackDetector
(
int
,
int
,
double
,
double
,
int
,
bool
,
double
)
{
throw_no_cuda
();
return
Ptr
<
gpu
::
CornersDetector
>
();
}
#else
/* !defined (HAVE_CUDA) */
...
...
@@ -60,119 +60,156 @@ namespace cv { namespace gpu { namespace cudev
}
}}}
void
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
::
operator
()(
const
GpuMat
&
image
,
GpuMat
&
corners
,
const
GpuMat
&
mask
)
namespace
{
#ifndef HAVE_OPENCV_GPUARITHM
(
void
)
image
;
(
void
)
corners
;
(
void
)
mask
;
throw_no_cuda
();
#else
using
namespace
cv
::
gpu
::
cudev
::
gfft
;
class
GoodFeaturesToTrackDetector
:
public
CornersDetector
{
public:
GoodFeaturesToTrackDetector
(
int
srcType
,
int
maxCorners
,
double
qualityLevel
,
double
minDistance
,
int
blockSize
,
bool
useHarrisDetector
,
double
harrisK
);
void
detect
(
InputArray
image
,
OutputArray
corners
,
InputArray
mask
=
noArray
());
private:
int
maxCorners_
;
double
qualityLevel_
;
double
minDistance_
;
Ptr
<
gpu
::
CornernessCriteria
>
cornerCriteria_
;
GpuMat
Dx_
;
GpuMat
Dy_
;
GpuMat
buf_
;
GpuMat
eig_
;
GpuMat
minMaxbuf_
;
GpuMat
tmpCorners_
;
};
GoodFeaturesToTrackDetector
::
GoodFeaturesToTrackDetector
(
int
srcType
,
int
maxCorners
,
double
qualityLevel
,
double
minDistance
,
int
blockSize
,
bool
useHarrisDetector
,
double
harrisK
)
:
maxCorners_
(
maxCorners
),
qualityLevel_
(
qualityLevel
),
minDistance_
(
minDistance
)
{
CV_Assert
(
qualityLevel_
>
0
&&
minDistance_
>=
0
&&
maxCorners_
>=
0
);
CV_Assert
(
qualityLevel
>
0
&&
minDistance
>=
0
&&
maxCorners
>=
0
);
CV_Assert
(
mask
.
empty
()
||
(
mask
.
type
()
==
CV_8UC1
&&
mask
.
size
()
==
image
.
size
()));
cornerCriteria_
=
useHarrisDetector
?
gpu
::
createHarrisCorner
(
srcType
,
blockSize
,
3
,
harrisK
)
:
gpu
::
createMinEigenValCorner
(
srcType
,
blockSize
,
3
);
}
ensureSizeIsEnough
(
image
.
size
(),
CV_32F
,
eig_
);
void
GoodFeaturesToTrackDetector
::
detect
(
InputArray
_image
,
OutputArray
_corners
,
InputArray
_mask
)
{
using
namespace
cv
::
gpu
::
cudev
::
gfft
;
Ptr
<
gpu
::
CornernessCriteria
>
cornerCriteria
=
useHarrisDetector
?
gpu
::
createHarrisCorner
(
image
.
type
(),
blockSize
,
3
,
harrisK
)
:
gpu
::
createMinEigenValCorner
(
image
.
type
(),
blockSize
,
3
);
GpuMat
image
=
_image
.
getGpuMat
();
GpuMat
mask
=
_mask
.
getGpuMat
();
cornerCriteria
->
compute
(
image
,
eig_
);
CV_Assert
(
mask
.
empty
()
||
(
mask
.
type
()
==
CV_8UC1
&&
mask
.
size
()
==
image
.
size
())
);
double
maxVal
=
0
;
gpu
::
minMax
(
eig_
,
0
,
&
maxVal
,
GpuMat
(),
minMaxbuf
_
);
ensureSizeIsEnough
(
image
.
size
(),
CV_32FC1
,
eig_
)
;
cornerCriteria_
->
compute
(
image
,
eig
_
);
ensureSizeIsEnough
(
1
,
std
::
max
(
1000
,
static_cast
<
int
>
(
image
.
size
().
area
()
*
0.05
)),
CV_32FC2
,
tmpCorners_
);
double
maxVal
=
0
;
gpu
::
minMax
(
eig_
,
0
,
&
maxVal
,
noArray
(),
minMaxbuf_
);
int
total
=
findCorners_gpu
(
eig_
,
static_cast
<
float
>
(
maxVal
*
qualityLevel
),
mask
,
tmpCorners_
.
ptr
<
float2
>
(),
tmpCorners_
.
cols
);
ensureSizeIsEnough
(
1
,
std
::
max
(
1000
,
static_cast
<
int
>
(
image
.
size
().
area
()
*
0.05
)),
CV_32FC2
,
tmpCorners_
);
if
(
total
==
0
)
{
corners
.
release
();
return
;
}
int
total
=
findCorners_gpu
(
eig_
,
static_cast
<
float
>
(
maxVal
*
qualityLevel_
),
mask
,
tmpCorners_
.
ptr
<
float2
>
(),
tmpCorners_
.
cols
);
sortCorners_gpu
(
eig_
,
tmpCorners_
.
ptr
<
float2
>
(),
total
);
if
(
total
==
0
)
{
_corners
.
release
();
return
;
}
if
(
minDistance
<
1
)
tmpCorners_
.
colRange
(
0
,
maxCorners
>
0
?
std
::
min
(
maxCorners
,
total
)
:
total
).
copyTo
(
corners
);
else
{
std
::
vector
<
Point2f
>
tmp
(
total
);
Mat
tmpMat
(
1
,
total
,
CV_32FC2
,
(
void
*
)
&
tmp
[
0
]);
tmpCorners_
.
colRange
(
0
,
total
).
download
(
tmpMat
);
sortCorners_gpu
(
eig_
,
tmpCorners_
.
ptr
<
float2
>
(),
total
);
std
::
vector
<
Point2f
>
tmp2
;
tmp2
.
reserve
(
total
);
if
(
minDistance_
<
1
)
{
tmpCorners_
.
colRange
(
0
,
maxCorners_
>
0
?
std
::
min
(
maxCorners_
,
total
)
:
total
).
copyTo
(
_corners
);
}
else
{
std
::
vector
<
Point2f
>
tmp
(
total
);
Mat
tmpMat
(
1
,
total
,
CV_32FC2
,
(
void
*
)
&
tmp
[
0
]);
tmpCorners_
.
colRange
(
0
,
total
).
download
(
tmpMat
);
const
int
cell_size
=
cvRound
(
minDistance
);
const
int
grid_width
=
(
image
.
cols
+
cell_size
-
1
)
/
cell_size
;
const
int
grid_height
=
(
image
.
rows
+
cell_size
-
1
)
/
cell_size
;
std
::
vector
<
Point2f
>
tmp2
;
tmp2
.
reserve
(
total
);
std
::
vector
<
std
::
vector
<
Point2f
>
>
grid
(
grid_width
*
grid_height
);
const
int
cell_size
=
cvRound
(
minDistance_
);
const
int
grid_width
=
(
image
.
cols
+
cell_size
-
1
)
/
cell_size
;
const
int
grid_height
=
(
image
.
rows
+
cell_size
-
1
)
/
cell_size
;
for
(
int
i
=
0
;
i
<
total
;
++
i
)
{
Point2f
p
=
tmp
[
i
];
std
::
vector
<
std
::
vector
<
Point2f
>
>
grid
(
grid_width
*
grid_height
);
bool
good
=
true
;
for
(
int
i
=
0
;
i
<
total
;
++
i
)
{
Point2f
p
=
tmp
[
i
];
int
x_cell
=
static_cast
<
int
>
(
p
.
x
/
cell_size
);
int
y_cell
=
static_cast
<
int
>
(
p
.
y
/
cell_size
);
bool
good
=
true
;
int
x1
=
x_cell
-
1
;
int
y1
=
y_cell
-
1
;
int
x2
=
x_cell
+
1
;
int
y2
=
y_cell
+
1
;
int
x_cell
=
static_cast
<
int
>
(
p
.
x
/
cell_size
);
int
y_cell
=
static_cast
<
int
>
(
p
.
y
/
cell_size
);
// boundary check
x1
=
std
::
max
(
0
,
x1
);
y1
=
std
::
max
(
0
,
y1
);
x2
=
std
::
min
(
grid_width
-
1
,
x2
);
y2
=
std
::
min
(
grid_height
-
1
,
y2
);
int
x1
=
x_cell
-
1
;
int
y1
=
y_cell
-
1
;
int
x2
=
x_cell
+
1
;
int
y2
=
y_cell
+
1
;
for
(
int
yy
=
y1
;
yy
<=
y2
;
yy
++
)
{
for
(
int
xx
=
x1
;
xx
<=
x2
;
xx
++
)
{
std
::
vector
<
Point2f
>&
m
=
grid
[
yy
*
grid_width
+
xx
]
;
// boundary check
x1
=
std
::
max
(
0
,
x1
);
y1
=
std
::
max
(
0
,
y1
);
x2
=
std
::
min
(
grid_width
-
1
,
x2
);
y2
=
std
::
min
(
grid_height
-
1
,
y2
)
;
if
(
!
m
.
empty
())
for
(
int
yy
=
y1
;
yy
<=
y2
;
yy
++
)
{
for
(
int
xx
=
x1
;
xx
<=
x2
;
xx
++
)
{
for
(
size_t
j
=
0
;
j
<
m
.
size
();
j
++
)
{
float
dx
=
p
.
x
-
m
[
j
].
x
;
float
dy
=
p
.
y
-
m
[
j
].
y
;
std
::
vector
<
Point2f
>&
m
=
grid
[
yy
*
grid_width
+
xx
];
if
(
dx
*
dx
+
dy
*
dy
<
minDistance
*
minDistance
)
if
(
!
m
.
empty
())
{
for
(
size_t
j
=
0
;
j
<
m
.
size
();
j
++
)
{
good
=
false
;
goto
break_out
;
float
dx
=
p
.
x
-
m
[
j
].
x
;
float
dy
=
p
.
y
-
m
[
j
].
y
;
if
(
dx
*
dx
+
dy
*
dy
<
minDistance_
*
minDistance_
)
{
good
=
false
;
goto
break_out
;
}
}
}
}
}
}
break_out:
break_out:
if
(
good
)
{
grid
[
y_cell
*
grid_width
+
x_cell
].
push_back
(
p
);
if
(
good
)
{
grid
[
y_cell
*
grid_width
+
x_cell
].
push_back
(
p
);
tmp2
.
push_back
(
p
);
tmp2
.
push_back
(
p
);
if
(
maxCorners
>
0
&&
tmp2
.
size
()
==
static_cast
<
size_t
>
(
maxCorners
))
break
;
if
(
maxCorners_
>
0
&&
tmp2
.
size
()
==
static_cast
<
size_t
>
(
maxCorners_
))
break
;
}
}
}
corners
.
upload
(
Mat
(
1
,
static_cast
<
int
>
(
tmp2
.
size
()),
CV_32FC2
,
&
tmp2
[
0
]));
_corners
.
create
(
1
,
static_cast
<
int
>
(
tmp2
.
size
()),
CV_32FC2
);
GpuMat
corners
=
_corners
.
getGpuMat
();
corners
.
upload
(
Mat
(
1
,
static_cast
<
int
>
(
tmp2
.
size
()),
CV_32FC2
,
&
tmp2
[
0
]));
}
}
#endif
}
Ptr
<
gpu
::
CornersDetector
>
cv
::
gpu
::
createGoodFeaturesToTrackDetector
(
int
srcType
,
int
maxCorners
,
double
qualityLevel
,
double
minDistance
,
int
blockSize
,
bool
useHarrisDetector
,
double
harrisK
)
{
return
new
GoodFeaturesToTrackDetector
(
srcType
,
maxCorners
,
qualityLevel
,
minDistance
,
blockSize
,
useHarrisDetector
,
harrisK
);
}
#endif
/* !defined (HAVE_CUDA) */
modules/gpuimgproc/test/test_gftt.cpp
浏览文件 @
70e6dc61
...
...
@@ -76,10 +76,10 @@ GPU_TEST_P(GoodFeaturesToTrack, Accuracy)
int
maxCorners
=
1000
;
double
qualityLevel
=
0.01
;
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
detector
(
maxCorners
,
qualityLevel
,
minDistance
);
cv
::
Ptr
<
cv
::
gpu
::
CornersDetector
>
detector
=
cv
::
gpu
::
createGoodFeaturesToTrackDetector
(
image
.
type
(),
maxCorners
,
qualityLevel
,
minDistance
);
cv
::
gpu
::
GpuMat
d_pts
;
detector
(
loadMat
(
image
),
d_pts
);
detector
->
detect
(
loadMat
(
image
),
d_pts
);
ASSERT_FALSE
(
d_pts
.
empty
());
...
...
@@ -114,12 +114,12 @@ GPU_TEST_P(GoodFeaturesToTrack, EmptyCorners)
int
maxCorners
=
1000
;
double
qualityLevel
=
0.01
;
cv
::
gpu
::
GoodFeaturesToTrackDetector_GPU
detector
(
maxCorners
,
qualityLevel
,
minDistance
);
cv
::
gpu
::
GpuMat
src
(
100
,
100
,
CV_8UC1
,
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
GpuMat
corners
(
1
,
maxCorners
,
CV_32FC2
);
detector
(
src
,
corners
);
cv
::
Ptr
<
cv
::
gpu
::
CornersDetector
>
detector
=
cv
::
gpu
::
createGoodFeaturesToTrackDetector
(
src
.
type
(),
maxCorners
,
qualityLevel
,
minDistance
);
detector
->
detect
(
src
,
corners
);
ASSERT_TRUE
(
corners
.
empty
());
}
...
...
modules/videostab/include/opencv2/videostab/global_motion.hpp
浏览文件 @
70e6dc61
...
...
@@ -217,7 +217,7 @@ public:
private:
Ptr
<
MotionEstimatorBase
>
motionEstimator_
;
gpu
::
GoodFeaturesToTrackDetector_GPU
detector_
;
Ptr
<
gpu
::
CornersDetector
>
detector_
;
SparsePyrLkOptFlowEstimatorGpu
optFlowEstimator_
;
Ptr
<
IOutlierRejector
>
outlierRejector_
;
...
...
modules/videostab/src/global_motion.cpp
浏览文件 @
70e6dc61
...
...
@@ -742,6 +742,8 @@ Mat KeypointBasedMotionEstimator::estimate(const Mat &frame0, const Mat &frame1,
KeypointBasedMotionEstimatorGpu
::
KeypointBasedMotionEstimatorGpu
(
Ptr
<
MotionEstimatorBase
>
estimator
)
:
ImageMotionEstimatorBase
(
estimator
->
motionModel
()),
motionEstimator_
(
estimator
)
{
detector_
=
gpu
::
createGoodFeaturesToTrackDetector
(
CV_8UC1
);
CV_Assert
(
gpu
::
getCudaEnabledDeviceCount
()
>
0
);
setOutlierRejector
(
new
NullOutlierRejector
());
}
...
...
@@ -769,7 +771,7 @@ Mat KeypointBasedMotionEstimatorGpu::estimate(const gpu::GpuMat &frame0, const g
}
// find keypoints
detector_
(
grayFrame0
,
pointsPrev_
);
detector_
->
detect
(
grayFrame0
,
pointsPrev_
);
// find correspondences
optFlowEstimator_
.
run
(
frame0
,
frame1
,
pointsPrev_
,
points_
,
status_
);
...
...
samples/gpu/performance/tests.cpp
浏览文件 @
70e6dc61
...
...
@@ -1174,15 +1174,15 @@ TEST(GoodFeaturesToTrack)
goodFeaturesToTrack
(
src
,
pts
,
8000
,
0.01
,
0.0
);
CPU_OFF
;
gpu
::
GoodFeaturesToTrackDetector_GPU
detector
(
8000
,
0.01
,
0.0
);
Ptr
<
gpu
::
CornersDetector
>
detector
=
gpu
::
createGoodFeaturesToTrackDetector
(
src
.
type
(),
8000
,
0.01
,
0.0
);
gpu
::
GpuMat
d_src
(
src
);
gpu
::
GpuMat
d_pts
;
detector
(
d_src
,
d_pts
);
detector
->
detect
(
d_src
,
d_pts
);
GPU_ON
;
detector
(
d_src
,
d_pts
);
detector
->
detect
(
d_src
,
d_pts
);
GPU_OFF
;
}
...
...
samples/gpu/pyrlk_optical_flow.cpp
浏览文件 @
70e6dc61
...
...
@@ -176,12 +176,12 @@ int main(int argc, const char* argv[])
// goodFeaturesToTrack
GoodFeaturesToTrackDetector_GPU
detector
(
points
,
0.01
,
minDist
);
GpuMat
d_frame0Gray
(
frame0Gray
);
GpuMat
d_prevPts
;
detector
(
d_frame0Gray
,
d_prevPts
);
Ptr
<
gpu
::
CornersDetector
>
detector
=
gpu
::
createGoodFeaturesToTrackDetector
(
d_frame0Gray
.
type
(),
points
,
0.01
,
minDist
);
detector
->
detect
(
d_frame0Gray
,
d_prevPts
);
// Sparse
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录