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
8f9ccc09
Commit
8f9ccc09
authored
Jan 09, 2014
by
Ilya Lavrenov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
replaced Mat by Input/Output arrays
parent
118709fd
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
70 additions
and
59 deletions
+70
-59
warpers.hpp
...es/stitching/include/opencv2/stitching/detail/warpers.hpp
+0
-0
warpers_inl.hpp
...titching/include/opencv2/stitching/detail/warpers_inl.hpp
+14
-10
warpers.cpp
modules/stitching/src/warpers.cpp
+24
-20
warpers_ocl.cpp
modules/stitching/src/warpers_ocl.cpp
+27
-24
test_warpers.cpp
modules/stitching/test/ocl/test_warpers.cpp
+5
-5
No files found.
modules/stitching/include/opencv2/stitching/detail/warpers.hpp
View file @
8f9ccc09
This diff is collapsed.
Click to expand it.
modules/stitching/include/opencv2/stitching/detail/warpers_inl.hpp
View file @
8f9ccc09
...
...
@@ -51,7 +51,7 @@ namespace cv {
namespace
detail
{
template
<
class
P
>
Point2f
RotationWarperBase
<
P
>::
warpPoint
(
const
Point2f
&
pt
,
const
Mat
&
K
,
const
Mat
&
R
)
Point2f
RotationWarperBase
<
P
>::
warpPoint
(
const
Point2f
&
pt
,
InputArray
K
,
InputArray
R
)
{
projector_
.
setCameraParams
(
K
,
R
);
Point2f
uv
;
...
...
@@ -61,15 +61,17 @@ Point2f RotationWarperBase<P>::warpPoint(const Point2f &pt, const Mat &K, const
template
<
class
P
>
Rect
RotationWarperBase
<
P
>::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
Mat
&
xmap
,
Mat
&
ymap
)
Rect
RotationWarperBase
<
P
>::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
OutputArray
_xmap
,
OutputArray
_
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
_xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
_ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
Mat
xmap
=
_xmap
.
getMat
(),
ymap
=
_ymap
.
getMat
();
float
x
,
y
;
for
(
int
v
=
dst_tl
.
y
;
v
<=
dst_br
.
y
;
++
v
)
...
...
@@ -87,8 +89,8 @@ Rect RotationWarperBase<P>::buildMaps(Size src_size, const Mat &K, const Mat &R,
template
<
class
P
>
Point
RotationWarperBase
<
P
>::
warp
(
const
Mat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
Mat
&
dst
)
Point
RotationWarperBase
<
P
>::
warp
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
OutputArray
dst
)
{
Mat
xmap
,
ymap
;
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
xmap
,
ymap
);
...
...
@@ -101,14 +103,16 @@ Point RotationWarperBase<P>::warp(const Mat &src, const Mat &K, const Mat &R, in
template
<
class
P
>
void
RotationWarperBase
<
P
>::
warpBackward
(
const
Mat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
Size
dst_size
,
Mat
&
dst
)
void
RotationWarperBase
<
P
>::
warpBackward
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
Size
dst_size
,
OutputArray
dst
)
{
projector_
.
setCameraParams
(
K
,
R
);
Point
src_tl
,
src_br
;
detectResultRoi
(
dst_size
,
src_tl
,
src_br
);
CV_Assert
(
src_br
.
x
-
src_tl
.
x
+
1
==
src
.
cols
&&
src_br
.
y
-
src_tl
.
y
+
1
==
src
.
rows
);
Size
size
=
src
.
size
();
CV_Assert
(
src_br
.
x
-
src_tl
.
x
+
1
==
size
.
width
&&
src_br
.
y
-
src_tl
.
y
+
1
==
size
.
height
);
Mat
xmap
(
dst_size
,
CV_32F
);
Mat
ymap
(
dst_size
,
CV_32F
);
...
...
@@ -130,7 +134,7 @@ void RotationWarperBase<P>::warpBackward(const Mat &src, const Mat &K, const Mat
template
<
class
P
>
Rect
RotationWarperBase
<
P
>::
warpRoi
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
)
Rect
RotationWarperBase
<
P
>::
warpRoi
(
Size
src_size
,
InputArray
K
,
InputArray
R
)
{
projector_
.
setCameraParams
(
K
,
R
);
...
...
modules/stitching/src/warpers.cpp
View file @
8f9ccc09
...
...
@@ -45,8 +45,10 @@
namespace
cv
{
namespace
detail
{
void
ProjectorBase
::
setCameraParams
(
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
)
void
ProjectorBase
::
setCameraParams
(
InputArray
_K
,
InputArray
_R
,
InputArray
_
T
)
{
Mat
K
=
_K
.
getMat
(),
R
=
_R
.
getMat
(),
T
=
_T
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32F
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32F
);
CV_Assert
((
T
.
size
()
==
Size
(
1
,
3
)
||
T
.
size
()
==
Size
(
3
,
1
))
&&
T
.
type
()
==
CV_32F
);
...
...
@@ -76,7 +78,7 @@ void ProjectorBase::setCameraParams(const Mat &K, const Mat &R, const Mat &T)
}
Point2f
PlaneWarper
::
warpPoint
(
const
Point2f
&
pt
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
)
Point2f
PlaneWarper
::
warpPoint
(
const
Point2f
&
pt
,
InputArray
K
,
InputArray
R
,
InputArray
T
)
{
projector_
.
setCameraParams
(
K
,
R
,
T
);
Point2f
uv
;
...
...
@@ -85,15 +87,17 @@ Point2f PlaneWarper::warpPoint(const Point2f &pt, const Mat &K, const Mat &R, co
}
Rect
PlaneWarper
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
,
Mat
&
xmap
,
Mat
&
ymap
)
Rect
PlaneWarper
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
OutputArray
_xmap
,
OutputArray
_
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
,
T
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
_xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
_ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32F
);
Mat
xmap
=
_xmap
.
getMat
(),
ymap
=
_ymap
.
getMat
();
float
x
,
y
;
for
(
int
v
=
dst_tl
.
y
;
v
<=
dst_br
.
y
;
++
v
)
...
...
@@ -110,8 +114,8 @@ Rect PlaneWarper::buildMaps(Size src_size, const Mat &K, const Mat &R, const Mat
}
Point
PlaneWarper
::
warp
(
const
Mat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
,
int
interp_mode
,
int
border_mode
,
Mat
&
dst
)
Point
PlaneWarper
::
warp
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
int
interp_mode
,
int
border_mode
,
OutputArray
dst
)
{
Mat
xmap
,
ymap
;
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
T
,
xmap
,
ymap
);
...
...
@@ -123,7 +127,7 @@ Point PlaneWarper::warp(const Mat &src, const Mat &K, const Mat &R, const Mat &T
}
Rect
PlaneWarper
::
warpRoi
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
)
Rect
PlaneWarper
::
warpRoi
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
)
{
projector_
.
setCameraParams
(
K
,
R
,
T
);
...
...
@@ -211,12 +215,12 @@ void SphericalWarper::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_b
#ifdef HAVE_OPENCV_CUDAWARPING
Rect
PlaneWarperGpu
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
Rect
PlaneWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
return
buildMaps
(
src_size
,
K
,
R
,
Mat
::
zeros
(
3
,
1
,
CV_32F
),
xmap
,
ymap
);
}
Rect
PlaneWarperGpu
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
Rect
PlaneWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
,
T
);
...
...
@@ -229,15 +233,15 @@ Rect PlaneWarperGpu::buildMaps(Size src_size, const Mat &K, const Mat &R, const
return
Rect
(
dst_tl
,
dst_br
);
}
Point
PlaneWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
Point
PlaneWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
return
warp
(
src
,
K
,
R
,
Mat
::
zeros
(
3
,
1
,
CV_32F
),
interp_mode
,
border_mode
,
dst
);
}
Point
PlaneWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
Point
PlaneWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
T
,
d_xmap_
,
d_ymap_
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
...
...
@@ -246,7 +250,7 @@ Point PlaneWarperGpu::warp(const cuda::GpuMat &src, const Mat &K, const Mat &R,
}
Rect
SphericalWarperGpu
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
Rect
SphericalWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
...
...
@@ -260,8 +264,8 @@ Rect SphericalWarperGpu::buildMaps(Size src_size, const Mat &K, const Mat &R, cu
}
Point
SphericalWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
Point
SphericalWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
d_xmap_
,
d_ymap_
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
...
...
@@ -270,7 +274,7 @@ Point SphericalWarperGpu::warp(const cuda::GpuMat &src, const Mat &K, const Mat
}
Rect
CylindricalWarperGpu
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
Rect
CylindricalWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
...
...
@@ -284,8 +288,8 @@ Rect CylindricalWarperGpu::buildMaps(Size src_size, const Mat &K, const Mat &R,
}
Point
CylindricalWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
Point
CylindricalWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
d_xmap_
,
d_ymap_
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
...
...
modules/stitching/src/warpers_ocl.cpp
View file @
8f9ccc09
...
...
@@ -48,7 +48,7 @@ namespace detail {
/////////////////////////////////////////// PlaneWarperOcl ////////////////////////////////////////////
Rect
PlaneWarperOcl
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
,
Mat
&
xmap
,
Mat
&
ymap
)
Rect
PlaneWarperOcl
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
OutputArray
xmap
,
OutputArray
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
...
...
@@ -60,18 +60,19 @@ Rect PlaneWarperOcl::buildMaps(Size src_size, const Mat & K, const Mat & R, cons
ocl
::
Kernel
k
(
"buildWarpPlaneMaps"
,
ocl
::
stitching
::
warpers_oclsrc
);
if
(
!
k
.
empty
())
{
xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32FC1
);
ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32FC1
);
Size
dsize
(
dst_br
.
x
-
dst_tl
.
x
+
1
,
dst_br
.
y
-
dst_tl
.
y
+
1
);
xmap
.
create
(
dsize
,
CV_32FC1
);
ymap
.
create
(
dsize
,
CV_32FC1
);
Mat
r_kinv
(
1
,
9
,
CV_32FC1
,
projector_
.
r_kinv
),
t
(
1
,
3
,
CV_32FC1
,
projector_
.
t
);
UMat
uxmap
=
xmap
.
getUMat
(
ACCESS_WRITE
),
uymap
=
ymap
.
getUMat
(
ACCESS_WRITE
),
UMat
uxmap
=
xmap
.
getUMat
(
),
uymap
=
ymap
.
getUMat
(
),
ur_kinv
=
r_kinv
.
getUMat
(
ACCESS_READ
),
ut
=
t
.
getUMat
(
ACCESS_READ
);
k
.
args
(
ocl
::
KernelArg
::
WriteOnlyNoSize
(
uxmap
),
ocl
::
KernelArg
::
WriteOnly
(
uymap
),
ocl
::
KernelArg
::
PtrReadOnly
(
ur_kinv
),
ocl
::
KernelArg
::
PtrReadOnly
(
ut
),
dst_tl
.
x
,
dst_tl
.
y
,
projector_
.
scale
);
size_t
globalsize
[
2
]
=
{
xmap
.
cols
,
xmap
.
rows
};
size_t
globalsize
[
2
]
=
{
dsize
.
width
,
dsize
.
height
};
if
(
k
.
run
(
2
,
globalsize
,
NULL
,
true
))
return
Rect
(
dst_tl
,
dst_br
);
}
...
...
@@ -80,13 +81,13 @@ Rect PlaneWarperOcl::buildMaps(Size src_size, const Mat & K, const Mat & R, cons
return
PlaneWarper
::
buildMaps
(
src_size
,
K
,
R
,
T
,
xmap
,
ymap
);
}
Point
PlaneWarperOcl
::
warp
(
const
Mat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
const
Mat
&
T
,
int
interp_mode
,
int
border_mode
,
Mat
&
dst
)
Point
PlaneWarperOcl
::
warp
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
int
interp_mode
,
int
border_mode
,
OutputArray
dst
)
{
Mat
uxmap
,
uymap
;
U
Mat
uxmap
,
uymap
;
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
T
,
uxmap
,
uymap
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
UMat
udst
=
dst
.
getUMat
(
ACCESS_WRITE
);
UMat
udst
=
dst
.
getUMat
();
remap
(
src
,
udst
,
uxmap
,
uymap
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
...
...
@@ -94,7 +95,7 @@ Point PlaneWarperOcl::warp(const Mat & src, const Mat & K, const Mat & R, const
/////////////////////////////////////////// SphericalWarperOcl ////////////////////////////////////////
Rect
SphericalWarperOcl
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
Mat
&
xmap
,
Mat
&
ymap
)
Rect
SphericalWarperOcl
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
OutputArray
xmap
,
OutputArray
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
...
...
@@ -106,16 +107,17 @@ Rect SphericalWarperOcl::buildMaps(Size src_size, const Mat & K, const Mat &R, M
ocl
::
Kernel
k
(
"buildWarpSphericalMaps"
,
ocl
::
stitching
::
warpers_oclsrc
);
if
(
!
k
.
empty
())
{
xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32FC1
);
ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32FC1
);
Size
dsize
(
dst_br
.
x
-
dst_tl
.
x
+
1
,
dst_br
.
y
-
dst_tl
.
y
+
1
);
xmap
.
create
(
dsize
,
CV_32FC1
);
ymap
.
create
(
dsize
,
CV_32FC1
);
Mat
r_kinv
(
1
,
9
,
CV_32FC1
,
projector_
.
r_kinv
);
UMat
uxmap
=
xmap
.
getUMat
(
ACCESS_WRITE
),
uymap
=
ymap
.
getUMat
(
ACCESS_WRITE
),
ur_kinv
=
r_kinv
.
getUMat
(
ACCESS_READ
);
UMat
uxmap
=
xmap
.
getUMat
(
),
uymap
=
ymap
.
getUMat
(
),
ur_kinv
=
r_kinv
.
getUMat
(
ACCESS_READ
);
k
.
args
(
ocl
::
KernelArg
::
WriteOnlyNoSize
(
uxmap
),
ocl
::
KernelArg
::
WriteOnly
(
uymap
),
ocl
::
KernelArg
::
PtrReadOnly
(
ur_kinv
),
dst_tl
.
x
,
dst_tl
.
y
,
projector_
.
scale
);
size_t
globalsize
[
2
]
=
{
xmap
.
cols
,
xmap
.
rows
};
size_t
globalsize
[
2
]
=
{
dsize
.
width
,
dsize
.
height
};
if
(
k
.
run
(
2
,
globalsize
,
NULL
,
true
))
return
Rect
(
dst_tl
,
dst_br
);
}
...
...
@@ -124,13 +126,13 @@ Rect SphericalWarperOcl::buildMaps(Size src_size, const Mat & K, const Mat &R, M
return
SphericalWarper
::
buildMaps
(
src_size
,
K
,
R
,
xmap
,
ymap
);
}
Point
SphericalWarperOcl
::
warp
(
const
Mat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
Mat
&
dst
)
Point
SphericalWarperOcl
::
warp
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
OutputArray
dst
)
{
Mat
uxmap
,
uymap
;
U
Mat
uxmap
,
uymap
;
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
uxmap
,
uymap
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
UMat
udst
=
dst
.
getUMat
(
ACCESS_WRITE
);
UMat
udst
=
dst
.
getUMat
();
remap
(
src
,
udst
,
uxmap
,
uymap
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
...
...
@@ -138,7 +140,7 @@ Point SphericalWarperOcl::warp(const Mat & src, const Mat & K, const Mat & R, in
/////////////////////////////////////////// CylindricalWarperOcl ////////////////////////////////////////
Rect
CylindricalWarperOcl
::
buildMaps
(
Size
src_size
,
const
Mat
&
K
,
const
Mat
&
R
,
Mat
&
xmap
,
Mat
&
ymap
)
Rect
CylindricalWarperOcl
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
OutputArray
xmap
,
OutputArray
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
...
...
@@ -150,16 +152,17 @@ Rect CylindricalWarperOcl::buildMaps(Size src_size, const Mat & K, const Mat & R
ocl
::
Kernel
k
(
"buildWarpCylindricalMaps"
,
ocl
::
stitching
::
warpers_oclsrc
);
if
(
!
k
.
empty
())
{
xmap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32FC1
);
ymap
.
create
(
dst_br
.
y
-
dst_tl
.
y
+
1
,
dst_br
.
x
-
dst_tl
.
x
+
1
,
CV_32FC1
);
Size
dsize
(
dst_br
.
x
-
dst_tl
.
x
+
1
,
dst_br
.
y
-
dst_tl
.
y
+
1
);
xmap
.
create
(
dsize
,
CV_32FC1
);
ymap
.
create
(
dsize
,
CV_32FC1
);
Mat
r_kinv
(
1
,
9
,
CV_32FC1
,
projector_
.
r_kinv
);
UMat
uxmap
=
xmap
.
getUMat
(
ACCESS_WRITE
),
uymap
=
ymap
.
getUMat
(
ACCESS_WRITE
),
ur_kinv
=
r_kinv
.
getUMat
(
ACCESS_READ
);
UMat
uxmap
=
xmap
.
getUMat
(
),
uymap
=
ymap
.
getUMat
(
),
ur_kinv
=
r_kinv
.
getUMat
(
ACCESS_READ
);
k
.
args
(
ocl
::
KernelArg
::
WriteOnlyNoSize
(
uxmap
),
ocl
::
KernelArg
::
WriteOnly
(
uymap
),
ocl
::
KernelArg
::
PtrReadOnly
(
ur_kinv
),
dst_tl
.
x
,
dst_tl
.
y
,
projector_
.
scale
);
size_t
globalsize
[
2
]
=
{
xmap
.
cols
,
xmap
.
rows
};
size_t
globalsize
[
2
]
=
{
dsize
.
width
,
dsize
.
height
};
if
(
k
.
run
(
2
,
globalsize
,
NULL
,
true
))
return
Rect
(
dst_tl
,
dst_br
);
}
...
...
@@ -168,13 +171,13 @@ Rect CylindricalWarperOcl::buildMaps(Size src_size, const Mat & K, const Mat & R
return
CylindricalWarper
::
buildMaps
(
src_size
,
K
,
R
,
xmap
,
ymap
);
}
Point
CylindricalWarperOcl
::
warp
(
const
Mat
&
src
,
const
Mat
&
K
,
const
Mat
&
R
,
int
interp_mode
,
int
border_mode
,
Mat
&
dst
)
Point
CylindricalWarperOcl
::
warp
(
InputArray
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
OutputArray
dst
)
{
Mat
uxmap
,
uymap
;
U
Mat
uxmap
,
uymap
;
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
uxmap
,
uymap
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
UMat
udst
=
dst
.
getUMat
(
ACCESS_WRITE
);
UMat
udst
=
dst
.
getUMat
();
remap
(
src
,
udst
,
uxmap
,
uymap
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
...
...
modules/stitching/test/ocl/test_warpers.cpp
View file @
8f9ccc09
...
...
@@ -92,9 +92,9 @@ OCL_TEST_F(SphericalWarperOclTest, Mat)
OCL_ON
(
warper
->
buildMaps
(
src
.
size
(),
K
,
R
,
uxmap
,
uymap
));
OCL_OFF
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
dst
));
OCL_O
FF
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
udst
));
OCL_O
N
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
udst
));
Near
(
1e-
5
);
Near
(
1e-
4
);
}
}
...
...
@@ -115,9 +115,9 @@ OCL_TEST_F(CylindricalWarperOclTest, Mat)
OCL_ON
(
warper
->
buildMaps
(
src
.
size
(),
K
,
R
,
uxmap
,
uymap
));
OCL_OFF
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
dst
));
OCL_O
FF
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
udst
));
OCL_O
N
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
udst
));
Near
(
1e-
5
);
Near
(
1e-
4
);
}
}
...
...
@@ -138,7 +138,7 @@ OCL_TEST_F(PlaneWarperOclTest, Mat)
OCL_ON
(
warper
->
buildMaps
(
src
.
size
(),
K
,
R
,
uxmap
,
uymap
));
OCL_OFF
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
dst
));
OCL_O
FF
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
udst
));
OCL_O
N
(
warper
->
warp
(
src
,
K
,
R
,
INTER_LINEAR
,
BORDER_REPLICATE
,
udst
));
Near
(
1e-5
);
}
...
...
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