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
63ff39f9
Commit
63ff39f9
authored
Dec 31, 2014
by
Vladislav Vinogradov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove obsolete gpu optical flow samples
parent
b3a743f0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
0 additions
and
351 deletions
+0
-351
brox_optical_flow.cpp
samples/gpu/brox_optical_flow.cpp
+0
-270
tests.cpp
samples/gpu/performance/tests.cpp
+0
-81
No files found.
samples/gpu/brox_optical_flow.cpp
deleted
100644 → 0
View file @
b3a743f0
#include <iostream>
#include <iomanip>
#include <string>
#include <ctype.h>
#include "opencv2/core.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/cudaoptflow.hpp"
#include "opencv2/cudaarithm.hpp"
using
namespace
std
;
using
namespace
cv
;
using
namespace
cv
::
cuda
;
void
getFlowField
(
const
Mat
&
u
,
const
Mat
&
v
,
Mat
&
flowField
);
int
main
(
int
argc
,
const
char
*
argv
[])
{
try
{
const
char
*
keys
=
"{ h help | | print help message }"
"{ l left | | specify left image }"
"{ r right | | specify right image }"
"{ s scale | 0.8 | set pyramid scale factor }"
"{ a alpha | 0.197 | set alpha }"
"{ g gamma | 50.0 | set gamma }"
"{ i inner | 10 | set number of inner iterations }"
"{ o outer | 77 | set number of outer iterations }"
"{ si solver | 10 | set number of basic solver iterations }"
"{ t time_step | 0.1 | set frame interpolation time step }"
;
CommandLineParser
cmd
(
argc
,
argv
,
keys
);
if
(
cmd
.
has
(
"help"
)
||
!
cmd
.
check
())
{
cmd
.
printMessage
();
cmd
.
printErrors
();
return
0
;
}
string
frame0Name
=
cmd
.
get
<
string
>
(
"left"
);
string
frame1Name
=
cmd
.
get
<
string
>
(
"right"
);
float
scale
=
cmd
.
get
<
float
>
(
"scale"
);
float
alpha
=
cmd
.
get
<
float
>
(
"alpha"
);
float
gamma
=
cmd
.
get
<
float
>
(
"gamma"
);
int
inner_iterations
=
cmd
.
get
<
int
>
(
"inner"
);
int
outer_iterations
=
cmd
.
get
<
int
>
(
"outer"
);
int
solver_iterations
=
cmd
.
get
<
int
>
(
"solver"
);
float
timeStep
=
cmd
.
get
<
float
>
(
"time_step"
);
if
(
frame0Name
.
empty
()
||
frame1Name
.
empty
())
{
cerr
<<
"Missing input file names"
<<
endl
;
return
-
1
;
}
Mat
frame0Color
=
imread
(
frame0Name
);
Mat
frame1Color
=
imread
(
frame1Name
);
if
(
frame0Color
.
empty
()
||
frame1Color
.
empty
())
{
cout
<<
"Can't load input images"
<<
endl
;
return
-
1
;
}
cv
::
cuda
::
printShortCudaDeviceInfo
(
cv
::
cuda
::
getDevice
());
cout
<<
"OpenCV / NVIDIA Computer Vision"
<<
endl
;
cout
<<
"Optical Flow Demo: Frame Interpolation"
<<
endl
;
cout
<<
"========================================="
<<
endl
;
namedWindow
(
"Forward flow"
);
namedWindow
(
"Backward flow"
);
namedWindow
(
"Interpolated frame"
);
cout
<<
"Press:"
<<
endl
;
cout
<<
"
\t
ESC to quit"
<<
endl
;
cout
<<
"
\t
'a' to move to the previous frame"
<<
endl
;
cout
<<
"
\t
's' to move to the next frame
\n
"
<<
endl
;
frame0Color
.
convertTo
(
frame0Color
,
CV_32F
,
1.0
/
255.0
);
frame1Color
.
convertTo
(
frame1Color
,
CV_32F
,
1.0
/
255.0
);
Mat
frame0Gray
,
frame1Gray
;
cv
::
cvtColor
(
frame0Color
,
frame0Gray
,
COLOR_BGR2GRAY
);
cv
::
cvtColor
(
frame1Color
,
frame1Gray
,
COLOR_BGR2GRAY
);
GpuMat
d_frame0
(
frame0Gray
);
GpuMat
d_frame1
(
frame1Gray
);
cout
<<
"Estimating optical flow"
<<
endl
;
BroxOpticalFlow
d_flow
(
alpha
,
gamma
,
scale
,
inner_iterations
,
outer_iterations
,
solver_iterations
);
cout
<<
"
\t
Forward..."
<<
endl
;
GpuMat
d_fu
,
d_fv
;
d_flow
(
d_frame0
,
d_frame1
,
d_fu
,
d_fv
);
Mat
flowFieldForward
;
getFlowField
(
Mat
(
d_fu
),
Mat
(
d_fv
),
flowFieldForward
);
cout
<<
"
\t
Backward..."
<<
endl
;
GpuMat
d_bu
,
d_bv
;
d_flow
(
d_frame1
,
d_frame0
,
d_bu
,
d_bv
);
Mat
flowFieldBackward
;
getFlowField
(
Mat
(
d_bu
),
Mat
(
d_bv
),
flowFieldBackward
);
cout
<<
"Interpolating..."
<<
endl
;
// first frame color components
GpuMat
d_b
,
d_g
,
d_r
;
// second frame color components
GpuMat
d_bt
,
d_gt
,
d_rt
;
// prepare color components on host and copy them to device memory
Mat
channels
[
3
];
cv
::
split
(
frame0Color
,
channels
);
d_b
.
upload
(
channels
[
0
]);
d_g
.
upload
(
channels
[
1
]);
d_r
.
upload
(
channels
[
2
]);
cv
::
split
(
frame1Color
,
channels
);
d_bt
.
upload
(
channels
[
0
]);
d_gt
.
upload
(
channels
[
1
]);
d_rt
.
upload
(
channels
[
2
]);
// temporary buffer
GpuMat
d_buf
;
// intermediate frame color components (GPU memory)
GpuMat
d_rNew
,
d_gNew
,
d_bNew
;
GpuMat
d_newFrame
;
vector
<
Mat
>
frames
;
frames
.
reserve
(
static_cast
<
int
>
(
1.0
f
/
timeStep
)
+
2
);
frames
.
push_back
(
frame0Color
);
// compute interpolated frames
for
(
float
timePos
=
timeStep
;
timePos
<
1.0
f
;
timePos
+=
timeStep
)
{
// interpolate blue channel
interpolateFrames
(
d_b
,
d_bt
,
d_fu
,
d_fv
,
d_bu
,
d_bv
,
timePos
,
d_bNew
,
d_buf
);
// interpolate green channel
interpolateFrames
(
d_g
,
d_gt
,
d_fu
,
d_fv
,
d_bu
,
d_bv
,
timePos
,
d_gNew
,
d_buf
);
// interpolate red channel
interpolateFrames
(
d_r
,
d_rt
,
d_fu
,
d_fv
,
d_bu
,
d_bv
,
timePos
,
d_rNew
,
d_buf
);
GpuMat
channels3
[]
=
{
d_bNew
,
d_gNew
,
d_rNew
};
cuda
::
merge
(
channels3
,
3
,
d_newFrame
);
frames
.
push_back
(
Mat
(
d_newFrame
));
cout
<<
setprecision
(
4
)
<<
timePos
*
100.0
f
<<
"%
\r
"
;
}
frames
.
push_back
(
frame1Color
);
cout
<<
setw
(
5
)
<<
"100%"
<<
endl
;
cout
<<
"Done"
<<
endl
;
imshow
(
"Forward flow"
,
flowFieldForward
);
imshow
(
"Backward flow"
,
flowFieldBackward
);
int
currentFrame
=
0
;
imshow
(
"Interpolated frame"
,
frames
[
currentFrame
]);
for
(;;)
{
int
key
=
toupper
(
waitKey
(
10
)
&
0xff
);
switch
(
key
)
{
case
27
:
return
0
;
case
'A'
:
if
(
currentFrame
>
0
)
--
currentFrame
;
imshow
(
"Interpolated frame"
,
frames
[
currentFrame
]);
break
;
case
'S'
:
if
(
currentFrame
<
static_cast
<
int
>
(
frames
.
size
())
-
1
)
++
currentFrame
;
imshow
(
"Interpolated frame"
,
frames
[
currentFrame
]);
break
;
}
}
}
catch
(
const
exception
&
ex
)
{
cerr
<<
ex
.
what
()
<<
endl
;
return
-
1
;
}
catch
(...)
{
cerr
<<
"Unknow error"
<<
endl
;
return
-
1
;
}
}
template
<
typename
T
>
inline
T
clamp
(
T
x
,
T
a
,
T
b
)
{
return
((
x
)
>
(
a
)
?
((
x
)
<
(
b
)
?
(
x
)
:
(
b
))
:
(
a
));
}
template
<
typename
T
>
inline
T
mapValue
(
T
x
,
T
a
,
T
b
,
T
c
,
T
d
)
{
x
=
clamp
(
x
,
a
,
b
);
return
c
+
(
d
-
c
)
*
(
x
-
a
)
/
(
b
-
a
);
}
void
getFlowField
(
const
Mat
&
u
,
const
Mat
&
v
,
Mat
&
flowField
)
{
float
maxDisplacement
=
1.0
f
;
for
(
int
i
=
0
;
i
<
u
.
rows
;
++
i
)
{
const
float
*
ptr_u
=
u
.
ptr
<
float
>
(
i
);
const
float
*
ptr_v
=
v
.
ptr
<
float
>
(
i
);
for
(
int
j
=
0
;
j
<
u
.
cols
;
++
j
)
{
float
d
=
max
(
fabsf
(
ptr_u
[
j
]),
fabsf
(
ptr_v
[
j
]));
if
(
d
>
maxDisplacement
)
maxDisplacement
=
d
;
}
}
flowField
.
create
(
u
.
size
(),
CV_8UC4
);
for
(
int
i
=
0
;
i
<
flowField
.
rows
;
++
i
)
{
const
float
*
ptr_u
=
u
.
ptr
<
float
>
(
i
);
const
float
*
ptr_v
=
v
.
ptr
<
float
>
(
i
);
Vec4b
*
row
=
flowField
.
ptr
<
Vec4b
>
(
i
);
for
(
int
j
=
0
;
j
<
flowField
.
cols
;
++
j
)
{
row
[
j
][
0
]
=
0
;
row
[
j
][
1
]
=
static_cast
<
unsigned
char
>
(
mapValue
(
-
ptr_v
[
j
],
-
maxDisplacement
,
maxDisplacement
,
0.0
f
,
255.0
f
));
row
[
j
][
2
]
=
static_cast
<
unsigned
char
>
(
mapValue
(
ptr_u
[
j
],
-
maxDisplacement
,
maxDisplacement
,
0.0
f
,
255.0
f
));
row
[
j
][
3
]
=
255
;
}
}
}
samples/gpu/performance/tests.cpp
View file @
63ff39f9
...
...
@@ -1187,87 +1187,6 @@ TEST(GoodFeaturesToTrack)
CUDA_OFF
;
}
TEST
(
PyrLKOpticalFlow
)
{
Mat
frame0
=
imread
(
abspath
(
"../data/rubberwhale1.png"
));
if
(
frame0
.
empty
())
throw
runtime_error
(
"can't open ../data/rubberwhale1.png"
);
Mat
frame1
=
imread
(
abspath
(
"../data/rubberwhale2.png"
));
if
(
frame1
.
empty
())
throw
runtime_error
(
"can't open ../data/rubberwhale2.png"
);
Mat
gray_frame
;
cvtColor
(
frame0
,
gray_frame
,
COLOR_BGR2GRAY
);
for
(
int
points
=
1000
;
points
<=
8000
;
points
*=
2
)
{
SUBTEST
<<
points
;
vector
<
Point2f
>
pts
;
goodFeaturesToTrack
(
gray_frame
,
pts
,
points
,
0.01
,
0.0
);
vector
<
Point2f
>
nextPts
;
vector
<
unsigned
char
>
status
;
vector
<
float
>
err
;
calcOpticalFlowPyrLK
(
frame0
,
frame1
,
pts
,
nextPts
,
status
,
err
);
CPU_ON
;
calcOpticalFlowPyrLK
(
frame0
,
frame1
,
pts
,
nextPts
,
status
,
err
);
CPU_OFF
;
cuda
::
PyrLKOpticalFlow
d_pyrLK
;
cuda
::
GpuMat
d_frame0
(
frame0
);
cuda
::
GpuMat
d_frame1
(
frame1
);
cuda
::
GpuMat
d_pts
;
Mat
pts_mat
(
1
,
(
int
)
pts
.
size
(),
CV_32FC2
,
(
void
*
)
&
pts
[
0
]);
d_pts
.
upload
(
pts_mat
);
cuda
::
GpuMat
d_nextPts
;
cuda
::
GpuMat
d_status
;
cuda
::
GpuMat
d_err
;
d_pyrLK
.
sparse
(
d_frame0
,
d_frame1
,
d_pts
,
d_nextPts
,
d_status
,
&
d_err
);
CUDA_ON
;
d_pyrLK
.
sparse
(
d_frame0
,
d_frame1
,
d_pts
,
d_nextPts
,
d_status
,
&
d_err
);
CUDA_OFF
;
}
}
TEST
(
FarnebackOpticalFlow
)
{
const
string
datasets
[]
=
{
"../data/rubberwhale"
,
"../data/basketball"
};
for
(
size_t
i
=
0
;
i
<
sizeof
(
datasets
)
/
sizeof
(
*
datasets
);
++
i
)
{
for
(
int
fastPyramids
=
0
;
fastPyramids
<
2
;
++
fastPyramids
)
{
for
(
int
useGaussianBlur
=
0
;
useGaussianBlur
<
2
;
++
useGaussianBlur
)
{
SUBTEST
<<
"dataset="
<<
datasets
[
i
]
<<
", fastPyramids="
<<
fastPyramids
<<
", useGaussianBlur="
<<
useGaussianBlur
;
Mat
frame0
=
imread
(
abspath
(
datasets
[
i
]
+
"1.png"
),
IMREAD_GRAYSCALE
);
Mat
frame1
=
imread
(
abspath
(
datasets
[
i
]
+
"2.png"
),
IMREAD_GRAYSCALE
);
if
(
frame0
.
empty
())
throw
runtime_error
(
"can't open "
+
datasets
[
i
]
+
"1.png"
);
if
(
frame1
.
empty
())
throw
runtime_error
(
"can't open "
+
datasets
[
i
]
+
"2.png"
);
cuda
::
FarnebackOpticalFlow
calc
;
calc
.
fastPyramids
=
fastPyramids
!=
0
;
calc
.
flags
|=
useGaussianBlur
?
OPTFLOW_FARNEBACK_GAUSSIAN
:
0
;
cuda
::
GpuMat
d_frame0
(
frame0
),
d_frame1
(
frame1
),
d_flowx
,
d_flowy
;
CUDA_ON
;
calc
(
d_frame0
,
d_frame1
,
d_flowx
,
d_flowy
);
CUDA_OFF
;
Mat
flow
;
CPU_ON
;
calcOpticalFlowFarneback
(
frame0
,
frame1
,
flow
,
calc
.
pyrScale
,
calc
.
numLevels
,
calc
.
winSize
,
calc
.
numIters
,
calc
.
polyN
,
calc
.
polySigma
,
calc
.
flags
);
CPU_OFF
;
}}}
}
#ifdef HAVE_OPENCV_BGSEGM
TEST
(
MOG
)
...
...
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