Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
17b1152f
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,发现更多精彩内容 >>
提交
17b1152f
编写于
1月 19, 2015
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3544 from jet47:cuda-warping-refactoring
上级
381917b7
a524a677
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
464 addition
and
469 deletion
+464
-469
modules/cudalegacy/include/opencv2/cudalegacy.hpp
modules/cudalegacy/include/opencv2/cudalegacy.hpp
+13
-0
modules/cudalegacy/src/image_pyramid.cpp
modules/cudalegacy/src/image_pyramid.cpp
+147
-0
modules/cudawarping/CMakeLists.txt
modules/cudawarping/CMakeLists.txt
+1
-1
modules/cudawarping/include/opencv2/cudawarping.hpp
modules/cudawarping/include/opencv2/cudawarping.hpp
+0
-23
modules/cudawarping/perf/perf_warping.cpp
modules/cudawarping/perf/perf_warping.cpp
+0
-119
modules/cudawarping/src/precomp.hpp
modules/cudawarping/src/precomp.hpp
+0
-7
modules/cudawarping/src/pyramids.cpp
modules/cudawarping/src/pyramids.cpp
+0
-110
modules/cudawarping/src/warp.cpp
modules/cudawarping/src/warp.cpp
+0
-122
modules/stitching/CMakeLists.txt
modules/stitching/CMakeLists.txt
+5
-0
modules/stitching/include/opencv2/stitching/detail/warpers.hpp
...es/stitching/include/opencv2/stitching/detail/warpers.hpp
+0
-2
modules/stitching/src/cuda/build_warp_maps.cu
modules/stitching/src/cuda/build_warp_maps.cu
+0
-0
modules/stitching/src/warpers.cpp
modules/stitching/src/warpers.cpp
+0
-85
modules/stitching/src/warpers_cuda.cpp
modules/stitching/src/warpers_cuda.cpp
+298
-0
未找到文件。
modules/cudalegacy/include/opencv2/cudalegacy.hpp
浏览文件 @
17b1152f
...
...
@@ -43,6 +43,7 @@
#ifndef __OPENCV_CUDALEGACY_HPP__
#define __OPENCV_CUDALEGACY_HPP__
#include "opencv2/core/cuda.hpp"
#include "opencv2/cudalegacy/NCV.hpp"
#include "opencv2/cudalegacy/NPP_staging.hpp"
#include "opencv2/cudalegacy/NCVPyramid.hpp"
...
...
@@ -56,4 +57,16 @@
@}
*/
namespace
cv
{
namespace
cuda
{
class
CV_EXPORTS
ImagePyramid
:
public
Algorithm
{
public:
virtual
void
getLayer
(
OutputArray
outImg
,
Size
outRoi
,
Stream
&
stream
=
Stream
::
Null
())
const
=
0
;
};
CV_EXPORTS
Ptr
<
ImagePyramid
>
createImagePyramid
(
InputArray
img
,
int
nLayers
=
-
1
,
Stream
&
stream
=
Stream
::
Null
());
}}
#endif
/* __OPENCV_CUDALEGACY_HPP__ */
modules/cudalegacy/src/image_pyramid.cpp
0 → 100644
浏览文件 @
17b1152f
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"
using
namespace
cv
;
using
namespace
cv
::
cuda
;
#if !defined HAVE_CUDA || defined(CUDA_DISABLER)
Ptr
<
ImagePyramid
>
cv
::
cuda
::
createImagePyramid
(
InputArray
,
int
,
Stream
&
)
{
throw_no_cuda
();
return
Ptr
<
ImagePyramid
>
();
}
#else // HAVE_CUDA
namespace
{
class
ImagePyramidImpl
:
public
ImagePyramid
{
public:
ImagePyramidImpl
(
InputArray
img
,
int
nLayers
,
Stream
&
stream
);
void
getLayer
(
OutputArray
outImg
,
Size
outRoi
,
Stream
&
stream
=
Stream
::
Null
())
const
;
private:
GpuMat
layer0_
;
std
::
vector
<
GpuMat
>
pyramid_
;
int
nLayers_
;
};
ImagePyramidImpl
::
ImagePyramidImpl
(
InputArray
_img
,
int
numLayers
,
Stream
&
stream
)
{
GpuMat
img
=
_img
.
getGpuMat
();
CV_Assert
(
img
.
depth
()
<=
CV_32F
&&
img
.
channels
()
<=
4
);
img
.
copyTo
(
layer0_
,
stream
);
Size
szLastLayer
=
img
.
size
();
nLayers_
=
1
;
if
(
numLayers
<=
0
)
numLayers
=
255
;
// it will cut-off when any of the dimensions goes 1
pyramid_
.
resize
(
numLayers
);
for
(
int
i
=
0
;
i
<
numLayers
-
1
;
++
i
)
{
Size
szCurLayer
(
szLastLayer
.
width
/
2
,
szLastLayer
.
height
/
2
);
if
(
szCurLayer
.
width
==
0
||
szCurLayer
.
height
==
0
)
break
;
ensureSizeIsEnough
(
szCurLayer
,
img
.
type
(),
pyramid_
[
i
]);
nLayers_
++
;
const
GpuMat
&
prevLayer
=
i
==
0
?
layer0_
:
pyramid_
[
i
-
1
];
cv
::
cuda
::
device
::
pyramid
::
downsampleX2
(
prevLayer
,
pyramid_
[
i
],
img
.
depth
(),
img
.
channels
(),
StreamAccessor
::
getStream
(
stream
));
szLastLayer
=
szCurLayer
;
}
}
void
ImagePyramidImpl
::
getLayer
(
OutputArray
_outImg
,
Size
outRoi
,
Stream
&
stream
)
const
{
CV_Assert
(
outRoi
.
width
<=
layer0_
.
cols
&&
outRoi
.
height
<=
layer0_
.
rows
&&
outRoi
.
width
>
0
&&
outRoi
.
height
>
0
);
ensureSizeIsEnough
(
outRoi
,
layer0_
.
type
(),
_outImg
);
GpuMat
outImg
=
_outImg
.
getGpuMat
();
if
(
outRoi
.
width
==
layer0_
.
cols
&&
outRoi
.
height
==
layer0_
.
rows
)
{
layer0_
.
copyTo
(
outImg
,
stream
);
return
;
}
float
lastScale
=
1.0
f
;
float
curScale
;
GpuMat
lastLayer
=
layer0_
;
GpuMat
curLayer
;
for
(
int
i
=
0
;
i
<
nLayers_
-
1
;
++
i
)
{
curScale
=
lastScale
*
0.5
f
;
curLayer
=
pyramid_
[
i
];
if
(
outRoi
.
width
==
curLayer
.
cols
&&
outRoi
.
height
==
curLayer
.
rows
)
{
curLayer
.
copyTo
(
outImg
,
stream
);
}
if
(
outRoi
.
width
>=
curLayer
.
cols
&&
outRoi
.
height
>=
curLayer
.
rows
)
break
;
lastScale
=
curScale
;
lastLayer
=
curLayer
;
}
cv
::
cuda
::
device
::
pyramid
::
interpolateFrom1
(
lastLayer
,
outImg
,
outImg
.
depth
(),
outImg
.
channels
(),
StreamAccessor
::
getStream
(
stream
));
}
}
Ptr
<
ImagePyramid
>
cv
::
cuda
::
createImagePyramid
(
InputArray
img
,
int
nLayers
,
Stream
&
stream
)
{
return
Ptr
<
ImagePyramid
>
(
new
ImagePyramidImpl
(
img
,
nLayers
,
stream
));
}
#endif
modules/cudawarping/CMakeLists.txt
浏览文件 @
17b1152f
...
...
@@ -6,4 +6,4 @@ set(the_description "CUDA-accelerated Image Warping")
ocv_warnings_disable
(
CMAKE_CXX_FLAGS /wd4127 /wd4324 /wd4512 -Wundef -Wmissing-declarations -Wshadow
)
ocv_define_module
(
cudawarping opencv_
imgproc OPTIONAL opencv_cudalegacy
)
ocv_define_module
(
cudawarping opencv_
core opencv_imgproc OPTIONAL opencv_cudev
)
modules/cudawarping/include/opencv2/cudawarping.hpp
浏览文件 @
17b1152f
...
...
@@ -171,21 +171,6 @@ CV_EXPORTS void warpPerspective(InputArray src, OutputArray dst, InputArray M, S
*/
CV_EXPORTS
void
buildWarpPerspectiveMaps
(
InputArray
M
,
bool
inverse
,
Size
dsize
,
OutputArray
xmap
,
OutputArray
ymap
,
Stream
&
stream
=
Stream
::
Null
());
/** @brief Builds plane warping maps.
*/
CV_EXPORTS
void
buildWarpPlaneMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
float
scale
,
OutputArray
map_x
,
OutputArray
map_y
,
Stream
&
stream
=
Stream
::
Null
());
/** @brief Builds cylindrical warping maps.
*/
CV_EXPORTS
void
buildWarpCylindricalMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
K
,
InputArray
R
,
float
scale
,
OutputArray
map_x
,
OutputArray
map_y
,
Stream
&
stream
=
Stream
::
Null
());
/** @brief Builds spherical warping maps.
*/
CV_EXPORTS
void
buildWarpSphericalMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
K
,
InputArray
R
,
float
scale
,
OutputArray
map_x
,
OutputArray
map_y
,
Stream
&
stream
=
Stream
::
Null
());
/** @brief Rotates an image around the origin (0,0) and then shifts it.
@param src Source image. Supports 1, 3 or 4 channels images with CV_8U , CV_16U or CV_32F
...
...
@@ -224,14 +209,6 @@ src .
*/
CV_EXPORTS
void
pyrUp
(
InputArray
src
,
OutputArray
dst
,
Stream
&
stream
=
Stream
::
Null
());
class
CV_EXPORTS
ImagePyramid
:
public
Algorithm
{
public:
virtual
void
getLayer
(
OutputArray
outImg
,
Size
outRoi
,
Stream
&
stream
=
Stream
::
Null
())
const
=
0
;
};
CV_EXPORTS
Ptr
<
ImagePyramid
>
createImagePyramid
(
InputArray
img
,
int
nLayers
=
-
1
,
Stream
&
stream
=
Stream
::
Null
());
//! @}
}}
// namespace cv { namespace cuda {
...
...
modules/cudawarping/perf/perf_warping.cpp
浏览文件 @
17b1152f
...
...
@@ -325,88 +325,6 @@ PERF_TEST_P(Sz_Depth_Cn_Inter_Border, WarpPerspective,
}
}
//////////////////////////////////////////////////////////////////////
// BuildWarpPlaneMaps
PERF_TEST_P
(
Sz
,
BuildWarpPlaneMaps
,
CUDA_TYPICAL_MAT_SIZES
)
{
const
cv
::
Size
size
=
GetParam
();
const
cv
::
Mat
K
=
cv
::
Mat
::
eye
(
3
,
3
,
CV_32FC1
);
const
cv
::
Mat
R
=
cv
::
Mat
::
ones
(
3
,
3
,
CV_32FC1
);
const
cv
::
Mat
T
=
cv
::
Mat
::
zeros
(
1
,
3
,
CV_32F
);
if
(
PERF_RUN_CUDA
())
{
cv
::
cuda
::
GpuMat
map_x
;
cv
::
cuda
::
GpuMat
map_y
;
TEST_CYCLE
()
cv
::
cuda
::
buildWarpPlaneMaps
(
size
,
cv
::
Rect
(
0
,
0
,
size
.
width
,
size
.
height
),
K
,
R
,
T
,
1.0
,
map_x
,
map_y
);
CUDA_SANITY_CHECK
(
map_x
);
CUDA_SANITY_CHECK
(
map_y
);
}
else
{
FAIL_NO_CPU
();
}
}
//////////////////////////////////////////////////////////////////////
// BuildWarpCylindricalMaps
PERF_TEST_P
(
Sz
,
BuildWarpCylindricalMaps
,
CUDA_TYPICAL_MAT_SIZES
)
{
const
cv
::
Size
size
=
GetParam
();
const
cv
::
Mat
K
=
cv
::
Mat
::
eye
(
3
,
3
,
CV_32FC1
);
const
cv
::
Mat
R
=
cv
::
Mat
::
ones
(
3
,
3
,
CV_32FC1
);
if
(
PERF_RUN_CUDA
())
{
cv
::
cuda
::
GpuMat
map_x
;
cv
::
cuda
::
GpuMat
map_y
;
TEST_CYCLE
()
cv
::
cuda
::
buildWarpCylindricalMaps
(
size
,
cv
::
Rect
(
0
,
0
,
size
.
width
,
size
.
height
),
K
,
R
,
1.0
,
map_x
,
map_y
);
CUDA_SANITY_CHECK
(
map_x
);
CUDA_SANITY_CHECK
(
map_y
);
}
else
{
FAIL_NO_CPU
();
}
}
//////////////////////////////////////////////////////////////////////
// BuildWarpSphericalMaps
PERF_TEST_P
(
Sz
,
BuildWarpSphericalMaps
,
CUDA_TYPICAL_MAT_SIZES
)
{
const
cv
::
Size
size
=
GetParam
();
const
cv
::
Mat
K
=
cv
::
Mat
::
eye
(
3
,
3
,
CV_32FC1
);
const
cv
::
Mat
R
=
cv
::
Mat
::
ones
(
3
,
3
,
CV_32FC1
);
if
(
PERF_RUN_CUDA
())
{
cv
::
cuda
::
GpuMat
map_x
;
cv
::
cuda
::
GpuMat
map_y
;
TEST_CYCLE
()
cv
::
cuda
::
buildWarpSphericalMaps
(
size
,
cv
::
Rect
(
0
,
0
,
size
.
width
,
size
.
height
),
K
,
R
,
1.0
,
map_x
,
map_y
);
CUDA_SANITY_CHECK
(
map_x
);
CUDA_SANITY_CHECK
(
map_y
);
}
else
{
FAIL_NO_CPU
();
}
}
//////////////////////////////////////////////////////////////////////
// Rotate
...
...
@@ -514,40 +432,3 @@ PERF_TEST_P(Sz_Depth_Cn, PyrUp,
CPU_SANITY_CHECK
(
dst
);
}
}
//////////////////////////////////////////////////////////////////////
// ImagePyramidGetLayer
PERF_TEST_P
(
Sz_Depth_Cn
,
ImagePyramidGetLayer
,
Combine
(
CUDA_TYPICAL_MAT_SIZES
,
Values
(
CV_8U
,
CV_16U
,
CV_32F
),
CUDA_CHANNELS_1_3_4
))
{
const
cv
::
Size
size
=
GET_PARAM
(
0
);
const
int
depth
=
GET_PARAM
(
1
);
const
int
channels
=
GET_PARAM
(
2
);
const
int
type
=
CV_MAKE_TYPE
(
depth
,
channels
);
cv
::
Mat
src
(
size
,
type
);
declare
.
in
(
src
,
WARMUP_RNG
);
const
int
nLayers
=
3
;
const
cv
::
Size
dstSize
(
size
.
width
/
2
+
10
,
size
.
height
/
2
+
10
);
if
(
PERF_RUN_CUDA
())
{
const
cv
::
cuda
::
GpuMat
d_src
(
src
);
cv
::
cuda
::
GpuMat
dst
;
cv
::
Ptr
<
cv
::
cuda
::
ImagePyramid
>
d_pyr
=
cv
::
cuda
::
createImagePyramid
(
d_src
,
nLayers
);
TEST_CYCLE
()
d_pyr
->
getLayer
(
dst
,
dstSize
);
CUDA_SANITY_CHECK
(
dst
);
}
else
{
FAIL_NO_CPU
();
}
}
modules/cudawarping/src/precomp.hpp
浏览文件 @
17b1152f
...
...
@@ -47,11 +47,4 @@
#include "opencv2/core/private.cuda.hpp"
#include "opencv2/opencv_modules.hpp"
#ifdef HAVE_OPENCV_CUDALEGACY
# include "opencv2/cudalegacy.hpp"
# include "opencv2/cudalegacy/private.hpp"
#endif
#endif
/* __OPENCV_PRECOMP_H__ */
modules/cudawarping/src/pyramids.cpp
浏览文件 @
17b1152f
...
...
@@ -50,8 +50,6 @@ using namespace cv::cuda;
void
cv
::
cuda
::
pyrDown
(
InputArray
,
OutputArray
,
Stream
&
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
pyrUp
(
InputArray
,
OutputArray
,
Stream
&
)
{
throw_no_cuda
();
}
Ptr
<
ImagePyramid
>
cv
::
cuda
::
createImagePyramid
(
InputArray
,
int
,
Stream
&
)
{
throw_no_cuda
();
return
Ptr
<
ImagePyramid
>
();
}
#else // HAVE_CUDA
//////////////////////////////////////////////////////////////////////////////
...
...
@@ -133,112 +131,4 @@ void cv::cuda::pyrUp(InputArray _src, OutputArray _dst, Stream& stream)
func
(
src
,
dst
,
StreamAccessor
::
getStream
(
stream
));
}
//////////////////////////////////////////////////////////////////////////////
// ImagePyramid
#ifdef HAVE_OPENCV_CUDALEGACY
namespace
{
class
ImagePyramidImpl
:
public
ImagePyramid
{
public:
ImagePyramidImpl
(
InputArray
img
,
int
nLayers
,
Stream
&
stream
);
void
getLayer
(
OutputArray
outImg
,
Size
outRoi
,
Stream
&
stream
=
Stream
::
Null
())
const
;
private:
GpuMat
layer0_
;
std
::
vector
<
GpuMat
>
pyramid_
;
int
nLayers_
;
};
ImagePyramidImpl
::
ImagePyramidImpl
(
InputArray
_img
,
int
numLayers
,
Stream
&
stream
)
{
GpuMat
img
=
_img
.
getGpuMat
();
CV_Assert
(
img
.
depth
()
<=
CV_32F
&&
img
.
channels
()
<=
4
);
img
.
copyTo
(
layer0_
,
stream
);
Size
szLastLayer
=
img
.
size
();
nLayers_
=
1
;
if
(
numLayers
<=
0
)
numLayers
=
255
;
// it will cut-off when any of the dimensions goes 1
pyramid_
.
resize
(
numLayers
);
for
(
int
i
=
0
;
i
<
numLayers
-
1
;
++
i
)
{
Size
szCurLayer
(
szLastLayer
.
width
/
2
,
szLastLayer
.
height
/
2
);
if
(
szCurLayer
.
width
==
0
||
szCurLayer
.
height
==
0
)
break
;
ensureSizeIsEnough
(
szCurLayer
,
img
.
type
(),
pyramid_
[
i
]);
nLayers_
++
;
const
GpuMat
&
prevLayer
=
i
==
0
?
layer0_
:
pyramid_
[
i
-
1
];
cv
::
cuda
::
device
::
pyramid
::
downsampleX2
(
prevLayer
,
pyramid_
[
i
],
img
.
depth
(),
img
.
channels
(),
StreamAccessor
::
getStream
(
stream
));
szLastLayer
=
szCurLayer
;
}
}
void
ImagePyramidImpl
::
getLayer
(
OutputArray
_outImg
,
Size
outRoi
,
Stream
&
stream
)
const
{
CV_Assert
(
outRoi
.
width
<=
layer0_
.
cols
&&
outRoi
.
height
<=
layer0_
.
rows
&&
outRoi
.
width
>
0
&&
outRoi
.
height
>
0
);
ensureSizeIsEnough
(
outRoi
,
layer0_
.
type
(),
_outImg
);
GpuMat
outImg
=
_outImg
.
getGpuMat
();
if
(
outRoi
.
width
==
layer0_
.
cols
&&
outRoi
.
height
==
layer0_
.
rows
)
{
layer0_
.
copyTo
(
outImg
,
stream
);
return
;
}
float
lastScale
=
1.0
f
;
float
curScale
;
GpuMat
lastLayer
=
layer0_
;
GpuMat
curLayer
;
for
(
int
i
=
0
;
i
<
nLayers_
-
1
;
++
i
)
{
curScale
=
lastScale
*
0.5
f
;
curLayer
=
pyramid_
[
i
];
if
(
outRoi
.
width
==
curLayer
.
cols
&&
outRoi
.
height
==
curLayer
.
rows
)
{
curLayer
.
copyTo
(
outImg
,
stream
);
}
if
(
outRoi
.
width
>=
curLayer
.
cols
&&
outRoi
.
height
>=
curLayer
.
rows
)
break
;
lastScale
=
curScale
;
lastLayer
=
curLayer
;
}
cv
::
cuda
::
device
::
pyramid
::
interpolateFrom1
(
lastLayer
,
outImg
,
outImg
.
depth
(),
outImg
.
channels
(),
StreamAccessor
::
getStream
(
stream
));
}
}
#endif
Ptr
<
ImagePyramid
>
cv
::
cuda
::
createImagePyramid
(
InputArray
img
,
int
nLayers
,
Stream
&
stream
)
{
#ifndef HAVE_OPENCV_CUDALEGACY
(
void
)
img
;
(
void
)
nLayers
;
(
void
)
stream
;
throw_no_cuda
();
return
Ptr
<
ImagePyramid
>
();
#else
return
Ptr
<
ImagePyramid
>
(
new
ImagePyramidImpl
(
img
,
nLayers
,
stream
));
#endif
}
#endif // HAVE_CUDA
modules/cudawarping/src/warp.cpp
浏览文件 @
17b1152f
...
...
@@ -53,10 +53,6 @@ void cv::cuda::buildWarpAffineMaps(InputArray, bool, Size, OutputArray, OutputAr
void
cv
::
cuda
::
warpPerspective
(
InputArray
,
OutputArray
,
InputArray
,
Size
,
int
,
int
,
Scalar
,
Stream
&
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
buildWarpPerspectiveMaps
(
InputArray
,
bool
,
Size
,
OutputArray
,
OutputArray
,
Stream
&
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
buildWarpPlaneMaps
(
Size
,
Rect
,
InputArray
,
InputArray
,
InputArray
,
float
,
OutputArray
,
OutputArray
,
Stream
&
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
buildWarpCylindricalMaps
(
Size
,
Rect
,
InputArray
,
InputArray
,
float
,
OutputArray
,
OutputArray
,
Stream
&
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
buildWarpSphericalMaps
(
Size
,
Rect
,
InputArray
,
InputArray
,
float
,
OutputArray
,
OutputArray
,
Stream
&
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
rotate
(
InputArray
,
OutputArray
,
Size
,
double
,
double
,
double
,
int
,
Stream
&
)
{
throw_no_cuda
();
}
#else // HAVE_CUDA
...
...
@@ -462,124 +458,6 @@ void cv::cuda::warpPerspective(InputArray _src, OutputArray _dst, InputArray _M,
}
}
//////////////////////////////////////////////////////////////////////////////
// buildWarpPlaneMaps
namespace
cv
{
namespace
cuda
{
namespace
device
{
namespace
imgproc
{
void
buildWarpPlaneMaps
(
int
tl_u
,
int
tl_v
,
PtrStepSzf
map_x
,
PtrStepSzf
map_y
,
const
float
k_rinv
[
9
],
const
float
r_kinv
[
9
],
const
float
t
[
3
],
float
scale
,
cudaStream_t
stream
);
}
}}}
void
cv
::
cuda
::
buildWarpPlaneMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
_K
,
InputArray
_R
,
InputArray
_T
,
float
scale
,
OutputArray
_map_x
,
OutputArray
_map_y
,
Stream
&
stream
)
{
(
void
)
src_size
;
Mat
K
=
_K
.
getMat
();
Mat
R
=
_R
.
getMat
();
Mat
T
=
_T
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32FC1
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32FC1
);
CV_Assert
(
(
T
.
size
()
==
Size
(
3
,
1
)
||
T
.
size
()
==
Size
(
1
,
3
))
&&
T
.
type
()
==
CV_32FC1
&&
T
.
isContinuous
()
);
Mat
K_Rinv
=
K
*
R
.
t
();
Mat
R_Kinv
=
R
*
K
.
inv
();
CV_Assert
(
K_Rinv
.
isContinuous
()
);
CV_Assert
(
R_Kinv
.
isContinuous
()
);
_map_x
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
_map_y
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
GpuMat
map_x
=
_map_x
.
getGpuMat
();
GpuMat
map_y
=
_map_y
.
getGpuMat
();
device
::
imgproc
::
buildWarpPlaneMaps
(
dst_roi
.
tl
().
x
,
dst_roi
.
tl
().
y
,
map_x
,
map_y
,
K_Rinv
.
ptr
<
float
>
(),
R_Kinv
.
ptr
<
float
>
(),
T
.
ptr
<
float
>
(),
scale
,
StreamAccessor
::
getStream
(
stream
));
}
//////////////////////////////////////////////////////////////////////////////
// buildWarpCylyndricalMaps
namespace
cv
{
namespace
cuda
{
namespace
device
{
namespace
imgproc
{
void
buildWarpCylindricalMaps
(
int
tl_u
,
int
tl_v
,
PtrStepSzf
map_x
,
PtrStepSzf
map_y
,
const
float
k_rinv
[
9
],
const
float
r_kinv
[
9
],
float
scale
,
cudaStream_t
stream
);
}
}}}
void
cv
::
cuda
::
buildWarpCylindricalMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
_K
,
InputArray
_R
,
float
scale
,
OutputArray
_map_x
,
OutputArray
_map_y
,
Stream
&
stream
)
{
(
void
)
src_size
;
Mat
K
=
_K
.
getMat
();
Mat
R
=
_R
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32FC1
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32FC1
);
Mat
K_Rinv
=
K
*
R
.
t
();
Mat
R_Kinv
=
R
*
K
.
inv
();
CV_Assert
(
K_Rinv
.
isContinuous
()
);
CV_Assert
(
R_Kinv
.
isContinuous
()
);
_map_x
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
_map_y
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
GpuMat
map_x
=
_map_x
.
getGpuMat
();
GpuMat
map_y
=
_map_y
.
getGpuMat
();
device
::
imgproc
::
buildWarpCylindricalMaps
(
dst_roi
.
tl
().
x
,
dst_roi
.
tl
().
y
,
map_x
,
map_y
,
K_Rinv
.
ptr
<
float
>
(),
R_Kinv
.
ptr
<
float
>
(),
scale
,
StreamAccessor
::
getStream
(
stream
));
}
//////////////////////////////////////////////////////////////////////////////
// buildWarpSphericalMaps
namespace
cv
{
namespace
cuda
{
namespace
device
{
namespace
imgproc
{
void
buildWarpSphericalMaps
(
int
tl_u
,
int
tl_v
,
PtrStepSzf
map_x
,
PtrStepSzf
map_y
,
const
float
k_rinv
[
9
],
const
float
r_kinv
[
9
],
float
scale
,
cudaStream_t
stream
);
}
}}}
void
cv
::
cuda
::
buildWarpSphericalMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
_K
,
InputArray
_R
,
float
scale
,
OutputArray
_map_x
,
OutputArray
_map_y
,
Stream
&
stream
)
{
(
void
)
src_size
;
Mat
K
=
_K
.
getMat
();
Mat
R
=
_R
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32FC1
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32FC1
);
Mat
K_Rinv
=
K
*
R
.
t
();
Mat
R_Kinv
=
R
*
K
.
inv
();
CV_Assert
(
K_Rinv
.
isContinuous
()
);
CV_Assert
(
R_Kinv
.
isContinuous
()
);
_map_x
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
_map_y
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
GpuMat
map_x
=
_map_x
.
getGpuMat
();
GpuMat
map_y
=
_map_y
.
getGpuMat
();
device
::
imgproc
::
buildWarpSphericalMaps
(
dst_roi
.
tl
().
x
,
dst_roi
.
tl
().
y
,
map_x
,
map_y
,
K_Rinv
.
ptr
<
float
>
(),
R_Kinv
.
ptr
<
float
>
(),
scale
,
StreamAccessor
::
getStream
(
stream
));
}
////////////////////////////////////////////////////////////////////////
// rotate
...
...
modules/stitching/CMakeLists.txt
浏览文件 @
17b1152f
set
(
the_description
"Images stitching"
)
if
(
HAVE_CUDA
)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS -Wundef -Wmissing-declarations -Wshadow
)
endif
()
ocv_define_module
(
stitching opencv_imgproc opencv_features2d opencv_calib3d opencv_objdetect
OPTIONAL opencv_cuda opencv_cudaarithm opencv_cudafilters opencv_cudafeatures2d opencv_xfeatures2d
)
modules/stitching/include/opencv2/stitching/detail/warpers.hpp
浏览文件 @
17b1152f
...
...
@@ -398,7 +398,6 @@ public:
};
#ifdef HAVE_OPENCV_CUDAWARPING
class
CV_EXPORTS
PlaneWarperGpu
:
public
PlaneWarper
{
public:
...
...
@@ -515,7 +514,6 @@ public:
private:
cuda
::
GpuMat
d_xmap_
,
d_ymap_
,
d_src_
,
d_dst_
;
};
#endif
struct
SphericalPortraitProjector
:
ProjectorBase
...
...
modules/
cudawarp
ing/src/cuda/build_warp_maps.cu
→
modules/
stitch
ing/src/cuda/build_warp_maps.cu
浏览文件 @
17b1152f
文件已移动
modules/stitching/src/warpers.cpp
浏览文件 @
17b1152f
...
...
@@ -242,91 +242,6 @@ void SphericalWarper::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_b
dst_br
.
y
=
static_cast
<
int
>
(
br_vf
);
}
#ifdef HAVE_OPENCV_CUDAWARPING
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
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
,
T
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
cuda
::
buildWarpPlaneMaps
(
src_size
,
Rect
(
dst_tl
,
Point
(
dst_br
.
x
+
1
,
dst_br
.
y
+
1
)),
K
,
R
,
T
,
projector_
.
scale
,
xmap
,
ymap
);
return
Rect
(
dst_tl
,
dst_br
);
}
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
,
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
());
cuda
::
remap
(
src
,
dst
,
d_xmap_
,
d_ymap_
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
}
Rect
SphericalWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
cuda
::
buildWarpSphericalMaps
(
src_size
,
Rect
(
dst_tl
,
Point
(
dst_br
.
x
+
1
,
dst_br
.
y
+
1
)),
K
,
R
,
projector_
.
scale
,
xmap
,
ymap
);
return
Rect
(
dst_tl
,
dst_br
);
}
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
());
cuda
::
remap
(
src
,
dst
,
d_xmap_
,
d_ymap_
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
}
Rect
CylindricalWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
projector_
.
setCameraParams
(
K
,
R
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
cuda
::
buildWarpCylindricalMaps
(
src_size
,
Rect
(
dst_tl
,
Point
(
dst_br
.
x
+
1
,
dst_br
.
y
+
1
)),
K
,
R
,
projector_
.
scale
,
xmap
,
ymap
);
return
Rect
(
dst_tl
,
dst_br
);
}
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
());
cuda
::
remap
(
src
,
dst
,
d_xmap_
,
d_ymap_
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
}
#endif
void
SphericalPortraitWarper
::
detectResultRoi
(
Size
src_size
,
Point
&
dst_tl
,
Point
&
dst_br
)
{
detectResultRoiByBorder
(
src_size
,
dst_tl
,
dst_br
);
...
...
modules/stitching/src/warpers_cuda.cpp
0 → 100644
浏览文件 @
17b1152f
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"
#include "opencv2/core/private.cuda.hpp"
using
namespace
cv
;
using
namespace
cv
::
cuda
;
#ifdef HAVE_CUDA
namespace
cv
{
namespace
cuda
{
namespace
device
{
namespace
imgproc
{
void
buildWarpPlaneMaps
(
int
tl_u
,
int
tl_v
,
PtrStepSzf
map_x
,
PtrStepSzf
map_y
,
const
float
k_rinv
[
9
],
const
float
r_kinv
[
9
],
const
float
t
[
3
],
float
scale
,
cudaStream_t
stream
);
void
buildWarpSphericalMaps
(
int
tl_u
,
int
tl_v
,
PtrStepSzf
map_x
,
PtrStepSzf
map_y
,
const
float
k_rinv
[
9
],
const
float
r_kinv
[
9
],
float
scale
,
cudaStream_t
stream
);
void
buildWarpCylindricalMaps
(
int
tl_u
,
int
tl_v
,
PtrStepSzf
map_x
,
PtrStepSzf
map_y
,
const
float
k_rinv
[
9
],
const
float
r_kinv
[
9
],
float
scale
,
cudaStream_t
stream
);
}
}}}
static
void
buildWarpPlaneMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
_K
,
InputArray
_R
,
InputArray
_T
,
float
scale
,
OutputArray
_map_x
,
OutputArray
_map_y
,
Stream
&
stream
=
Stream
::
Null
())
{
(
void
)
src_size
;
Mat
K
=
_K
.
getMat
();
Mat
R
=
_R
.
getMat
();
Mat
T
=
_T
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32FC1
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32FC1
);
CV_Assert
(
(
T
.
size
()
==
Size
(
3
,
1
)
||
T
.
size
()
==
Size
(
1
,
3
))
&&
T
.
type
()
==
CV_32FC1
&&
T
.
isContinuous
()
);
Mat
K_Rinv
=
K
*
R
.
t
();
Mat
R_Kinv
=
R
*
K
.
inv
();
CV_Assert
(
K_Rinv
.
isContinuous
()
);
CV_Assert
(
R_Kinv
.
isContinuous
()
);
_map_x
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
_map_y
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
GpuMat
map_x
=
_map_x
.
getGpuMat
();
GpuMat
map_y
=
_map_y
.
getGpuMat
();
device
::
imgproc
::
buildWarpPlaneMaps
(
dst_roi
.
tl
().
x
,
dst_roi
.
tl
().
y
,
map_x
,
map_y
,
K_Rinv
.
ptr
<
float
>
(),
R_Kinv
.
ptr
<
float
>
(),
T
.
ptr
<
float
>
(),
scale
,
StreamAccessor
::
getStream
(
stream
));
}
static
void
buildWarpSphericalMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
_K
,
InputArray
_R
,
float
scale
,
OutputArray
_map_x
,
OutputArray
_map_y
,
Stream
&
stream
=
Stream
::
Null
())
{
(
void
)
src_size
;
Mat
K
=
_K
.
getMat
();
Mat
R
=
_R
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32FC1
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32FC1
);
Mat
K_Rinv
=
K
*
R
.
t
();
Mat
R_Kinv
=
R
*
K
.
inv
();
CV_Assert
(
K_Rinv
.
isContinuous
()
);
CV_Assert
(
R_Kinv
.
isContinuous
()
);
_map_x
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
_map_y
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
GpuMat
map_x
=
_map_x
.
getGpuMat
();
GpuMat
map_y
=
_map_y
.
getGpuMat
();
device
::
imgproc
::
buildWarpSphericalMaps
(
dst_roi
.
tl
().
x
,
dst_roi
.
tl
().
y
,
map_x
,
map_y
,
K_Rinv
.
ptr
<
float
>
(),
R_Kinv
.
ptr
<
float
>
(),
scale
,
StreamAccessor
::
getStream
(
stream
));
}
static
void
buildWarpCylindricalMaps
(
Size
src_size
,
Rect
dst_roi
,
InputArray
_K
,
InputArray
_R
,
float
scale
,
OutputArray
_map_x
,
OutputArray
_map_y
,
Stream
&
stream
=
Stream
::
Null
())
{
(
void
)
src_size
;
Mat
K
=
_K
.
getMat
();
Mat
R
=
_R
.
getMat
();
CV_Assert
(
K
.
size
()
==
Size
(
3
,
3
)
&&
K
.
type
()
==
CV_32FC1
);
CV_Assert
(
R
.
size
()
==
Size
(
3
,
3
)
&&
R
.
type
()
==
CV_32FC1
);
Mat
K_Rinv
=
K
*
R
.
t
();
Mat
R_Kinv
=
R
*
K
.
inv
();
CV_Assert
(
K_Rinv
.
isContinuous
()
);
CV_Assert
(
R_Kinv
.
isContinuous
()
);
_map_x
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
_map_y
.
create
(
dst_roi
.
size
(),
CV_32FC1
);
GpuMat
map_x
=
_map_x
.
getGpuMat
();
GpuMat
map_y
=
_map_y
.
getGpuMat
();
device
::
imgproc
::
buildWarpCylindricalMaps
(
dst_roi
.
tl
().
x
,
dst_roi
.
tl
().
y
,
map_x
,
map_y
,
K_Rinv
.
ptr
<
float
>
(),
R_Kinv
.
ptr
<
float
>
(),
scale
,
StreamAccessor
::
getStream
(
stream
));
}
#endif
Rect
cv
::
detail
::
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
cv
::
detail
::
PlaneWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
#ifndef HAVE_CUDA
(
void
)
src_size
;
(
void
)
K
;
(
void
)
R
;
(
void
)
T
;
(
void
)
xmap
;
(
void
)
ymap
;
throw_no_cuda
();
return
Rect
();
#else
projector_
.
setCameraParams
(
K
,
R
,
T
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
::
buildWarpPlaneMaps
(
src_size
,
Rect
(
dst_tl
,
Point
(
dst_br
.
x
+
1
,
dst_br
.
y
+
1
)),
K
,
R
,
T
,
projector_
.
scale
,
xmap
,
ymap
);
return
Rect
(
dst_tl
,
dst_br
);
#endif
}
Point
cv
::
detail
::
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
cv
::
detail
::
PlaneWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
InputArray
T
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
#ifndef HAVE_OPENCV_CUDAWARPING
(
void
)
src
;
(
void
)
K
;
(
void
)
R
;
(
void
)
T
;
(
void
)
interp_mode
;
(
void
)
border_mode
;
(
void
)
dst
;
throw_no_cuda
();
return
Point
();
#else
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
());
cuda
::
remap
(
src
,
dst
,
d_xmap_
,
d_ymap_
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
#endif
}
Rect
cv
::
detail
::
SphericalWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
#ifndef HAVE_CUDA
(
void
)
src_size
;
(
void
)
K
;
(
void
)
R
;
(
void
)
xmap
;
(
void
)
ymap
;
throw_no_cuda
();
return
Rect
();
#else
projector_
.
setCameraParams
(
K
,
R
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
::
buildWarpSphericalMaps
(
src_size
,
Rect
(
dst_tl
,
Point
(
dst_br
.
x
+
1
,
dst_br
.
y
+
1
)),
K
,
R
,
projector_
.
scale
,
xmap
,
ymap
);
return
Rect
(
dst_tl
,
dst_br
);
#endif
}
Point
cv
::
detail
::
SphericalWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
#ifndef HAVE_OPENCV_CUDAWARPING
(
void
)
src
;
(
void
)
K
;
(
void
)
R
;
(
void
)
interp_mode
;
(
void
)
border_mode
;
(
void
)
dst
;
throw_no_cuda
();
return
Point
();
#else
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
d_xmap_
,
d_ymap_
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
cuda
::
remap
(
src
,
dst
,
d_xmap_
,
d_ymap_
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
#endif
}
Rect
cv
::
detail
::
CylindricalWarperGpu
::
buildMaps
(
Size
src_size
,
InputArray
K
,
InputArray
R
,
cuda
::
GpuMat
&
xmap
,
cuda
::
GpuMat
&
ymap
)
{
#ifndef HAVE_CUDA
(
void
)
src_size
;
(
void
)
K
;
(
void
)
R
;
(
void
)
xmap
;
(
void
)
ymap
;
throw_no_cuda
();
return
Rect
();
#else
projector_
.
setCameraParams
(
K
,
R
);
Point
dst_tl
,
dst_br
;
detectResultRoi
(
src_size
,
dst_tl
,
dst_br
);
::
buildWarpCylindricalMaps
(
src_size
,
Rect
(
dst_tl
,
Point
(
dst_br
.
x
+
1
,
dst_br
.
y
+
1
)),
K
,
R
,
projector_
.
scale
,
xmap
,
ymap
);
return
Rect
(
dst_tl
,
dst_br
);
#endif
}
Point
cv
::
detail
::
CylindricalWarperGpu
::
warp
(
const
cuda
::
GpuMat
&
src
,
InputArray
K
,
InputArray
R
,
int
interp_mode
,
int
border_mode
,
cuda
::
GpuMat
&
dst
)
{
#ifndef HAVE_OPENCV_CUDAWARPING
(
void
)
src
;
(
void
)
K
;
(
void
)
R
;
(
void
)
interp_mode
;
(
void
)
border_mode
;
(
void
)
dst
;
throw_no_cuda
();
return
Point
();
#else
Rect
dst_roi
=
buildMaps
(
src
.
size
(),
K
,
R
,
d_xmap_
,
d_ymap_
);
dst
.
create
(
dst_roi
.
height
+
1
,
dst_roi
.
width
+
1
,
src
.
type
());
cuda
::
remap
(
src
,
dst
,
d_xmap_
,
d_ymap_
,
interp_mode
,
border_mode
);
return
dst_roi
.
tl
();
#endif
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录