Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
f826bd8b
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,发现更多精彩内容 >>
提交
f826bd8b
编写于
8月 22, 2013
作者:
V
Vladislav Vinogradov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
removed NPP implementation
上级
e1397f6c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
122 deletion
+33
-122
modules/gpu/src/resize.cpp
modules/gpu/src/resize.cpp
+30
-78
modules/gpu/test/test_resize.cpp
modules/gpu/test/test_resize.cpp
+3
-44
未找到文件。
modules/gpu/src/resize.cpp
浏览文件 @
f826bd8b
...
...
@@ -44,18 +44,7 @@
#if !defined HAVE_CUDA || defined(CUDA_DISABLER)
void
cv
::
gpu
::
resize
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
Size
dsize
,
double
fx
,
double
fy
,
int
interpolation
,
Stream
&
s
)
{
(
void
)
src
;
(
void
)
dst
;
(
void
)
dsize
;
(
void
)
fx
;
(
void
)
fy
;
(
void
)
interpolation
;
(
void
)
s
;
throw_nogpu
();
}
void
cv
::
gpu
::
resize
(
const
GpuMat
&
,
GpuMat
&
,
Size
,
double
,
double
,
int
,
Stream
&
)
{
throw_nogpu
();
}
#else // HAVE_CUDA
...
...
@@ -69,94 +58,57 @@ namespace cv { namespace gpu { namespace device
}
}}}
void
cv
::
gpu
::
resize
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
Size
dsize
,
double
fx
,
double
fy
,
int
interpolation
,
Stream
&
s
)
void
cv
::
gpu
::
resize
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
Size
dsize
,
double
fx
,
double
fy
,
int
interpolation
,
Stream
&
s
tream
)
{
CV_Assert
(
src
.
depth
()
<=
CV_32F
&&
src
.
channels
()
<=
4
);
CV_Assert
(
interpolation
==
INTER_NEAREST
||
interpolation
==
INTER_LINEAR
||
interpolation
==
INTER_CUBIC
||
interpolation
==
INTER_AREA
);
CV_Assert
(
!
(
dsize
==
Size
())
||
(
fx
>
0
&&
fy
>
0
));
using
namespace
::
cv
::
gpu
::
device
::
imgproc
;
typedef
void
(
*
func_t
)(
PtrStepSzb
src
,
PtrStepSzb
srcWhole
,
int
xoff
,
int
yoff
,
float
fx
,
float
fy
,
PtrStepSzb
dst
,
int
interpolation
,
cudaStream_t
stream
);
static
const
func_t
funcs
[
6
][
4
]
=
{
{
resize_gpu
<
uchar
>
,
0
/*resize_gpu<uchar2>*/
,
resize_gpu
<
uchar3
>
,
resize_gpu
<
uchar4
>
},
{
0
/*resize_gpu<schar>*/
,
0
/*resize_gpu<char2>*/
,
0
/*resize_gpu<char3>*/
,
0
/*resize_gpu<char4>*/
},
{
resize_gpu
<
ushort
>
,
0
/*resize_gpu<ushort2>*/
,
resize_gpu
<
ushort3
>
,
resize_gpu
<
ushort4
>
},
{
resize_gpu
<
short
>
,
0
/*resize_gpu<short2>*/
,
resize_gpu
<
short3
>
,
resize_gpu
<
short4
>
},
{
0
/*resize_gpu<int>*/
,
0
/*resize_gpu<int2>*/
,
0
/*resize_gpu<int3>*/
,
0
/*resize_gpu<int4>*/
},
{
resize_gpu
<
float
>
,
0
/*resize_gpu<float2>*/
,
resize_gpu
<
float3
>
,
resize_gpu
<
float4
>
}
};
CV_Assert
(
src
.
depth
()
<=
CV_32F
&&
src
.
channels
()
<=
4
);
CV_Assert
(
interpolation
==
INTER_NEAREST
||
interpolation
==
INTER_LINEAR
||
interpolation
==
INTER_CUBIC
||
interpolation
==
INTER_AREA
);
CV_Assert
(
!
(
dsize
==
Size
())
||
(
fx
>
0
&&
fy
>
0
)
);
if
(
dsize
==
Size
())
{
dsize
=
Size
(
saturate_cast
<
int
>
(
src
.
cols
*
fx
),
saturate_cast
<
int
>
(
src
.
rows
*
fy
));
}
else
{
fx
=
static_cast
<
double
>
(
dsize
.
width
)
/
src
.
cols
;
fy
=
static_cast
<
double
>
(
dsize
.
height
)
/
src
.
rows
;
}
if
(
dsize
!=
dst
.
size
())
dst
.
create
(
dsize
,
src
.
type
());
dst
.
create
(
dsize
,
src
.
type
());
if
(
dsize
==
src
.
size
())
{
if
(
s
)
s
.
enqueueCopy
(
src
,
dst
);
if
(
s
tream
)
s
tream
.
enqueueCopy
(
src
,
dst
);
else
src
.
copyTo
(
dst
);
return
;
}
cudaStream_t
stream
=
StreamAccessor
::
getStream
(
s
);
const
func_t
func
=
funcs
[
src
.
depth
()][
src
.
channels
()
-
1
];
if
(
!
func
)
CV_Error
(
CV_StsUnsupportedFormat
,
"Unsupported combination of source and destination types"
);
Size
wholeSize
;
Point
ofs
;
src
.
locateROI
(
wholeSize
,
ofs
);
PtrStepSzb
wholeSrc
(
wholeSize
.
height
,
wholeSize
.
width
,
src
.
datastart
,
src
.
step
);
bool
useNpp
=
(
src
.
type
()
==
CV_8UC1
||
src
.
type
()
==
CV_8UC4
);
useNpp
=
useNpp
&&
(
interpolation
==
INTER_NEAREST
||
interpolation
==
INTER_LINEAR
);
if
(
useNpp
)
{
typedef
NppStatus
(
*
func_t
)(
const
Npp8u
*
pSrc
,
NppiSize
oSrcSize
,
int
nSrcStep
,
NppiRect
oSrcROI
,
Npp8u
*
pDst
,
int
nDstStep
,
NppiSize
dstROISize
,
double
xFactor
,
double
yFactor
,
int
eInterpolation
);
const
func_t
funcs
[
4
]
=
{
nppiResize_8u_C1R
,
0
,
0
,
nppiResize_8u_C4R
};
static
const
int
npp_inter
[]
=
{
NPPI_INTER_NN
,
NPPI_INTER_LINEAR
,
NPPI_INTER_CUBIC
,
0
,
NPPI_INTER_LANCZOS
};
NppiSize
srcsz
;
srcsz
.
width
=
wholeSize
.
width
;
srcsz
.
height
=
wholeSize
.
height
;
NppiRect
srcrect
;
srcrect
.
x
=
ofs
.
x
;
srcrect
.
y
=
ofs
.
y
;
srcrect
.
width
=
src
.
cols
;
srcrect
.
height
=
src
.
rows
;
NppiSize
dstsz
;
dstsz
.
width
=
dst
.
cols
;
dstsz
.
height
=
dst
.
rows
;
NppStreamHandler
h
(
stream
);
nppSafeCall
(
funcs
[
src
.
channels
()
-
1
](
src
.
datastart
,
srcsz
,
static_cast
<
int
>
(
src
.
step
),
srcrect
,
dst
.
ptr
<
Npp8u
>
(),
static_cast
<
int
>
(
dst
.
step
),
dstsz
,
fx
,
fy
,
npp_inter
[
interpolation
])
);
if
(
stream
==
0
)
cudaSafeCall
(
cudaDeviceSynchronize
()
);
}
else
{
using
namespace
::
cv
::
gpu
::
device
::
imgproc
;
typedef
void
(
*
func_t
)(
PtrStepSzb
src
,
PtrStepSzb
srcWhole
,
int
xoff
,
int
yoff
,
float
fx
,
float
fy
,
PtrStepSzb
dst
,
int
interpolation
,
cudaStream_t
stream
);
static
const
func_t
funcs
[
6
][
4
]
=
{
{
resize_gpu
<
uchar
>
,
0
/*resize_gpu<uchar2>*/
,
resize_gpu
<
uchar3
>
,
resize_gpu
<
uchar4
>
},
{
0
/*resize_gpu<schar>*/
,
0
/*resize_gpu<char2>*/
,
0
/*resize_gpu<char3>*/
,
0
/*resize_gpu<char4>*/
},
{
resize_gpu
<
ushort
>
,
0
/*resize_gpu<ushort2>*/
,
resize_gpu
<
ushort3
>
,
resize_gpu
<
ushort4
>
},
{
resize_gpu
<
short
>
,
0
/*resize_gpu<short2>*/
,
resize_gpu
<
short3
>
,
resize_gpu
<
short4
>
},
{
0
/*resize_gpu<int>*/
,
0
/*resize_gpu<int2>*/
,
0
/*resize_gpu<int3>*/
,
0
/*resize_gpu<int4>*/
},
{
resize_gpu
<
float
>
,
0
/*resize_gpu<float2>*/
,
resize_gpu
<
float3
>
,
resize_gpu
<
float4
>
}
};
const
func_t
func
=
funcs
[
src
.
depth
()][
src
.
channels
()
-
1
];
CV_Assert
(
func
!=
0
);
func
(
src
,
PtrStepSzb
(
wholeSize
.
height
,
wholeSize
.
width
,
src
.
datastart
,
src
.
step
),
ofs
.
x
,
ofs
.
y
,
static_cast
<
float
>
(
1.0
/
fx
),
static_cast
<
float
>
(
1.0
/
fy
),
dst
,
interpolation
,
stream
);
}
func
(
src
,
wholeSrc
,
ofs
.
x
,
ofs
.
y
,
static_cast
<
float
>
(
1.0
/
fx
),
static_cast
<
float
>
(
1.0
/
fy
),
dst
,
interpolation
,
StreamAccessor
::
getStream
(
stream
));
}
#endif // HAVE_CUDA
modules/gpu/test/test_resize.cpp
浏览文件 @
f826bd8b
...
...
@@ -155,7 +155,7 @@ GPU_TEST_P(Resize, Accuracy)
INSTANTIATE_TEST_CASE_P
(
GPU_ImgProc
,
Resize
,
testing
::
Combine
(
ALL_DEVICES
,
DIFFERENT_SIZES
,
testing
::
Values
(
MatType
(
CV_8UC
3
),
MatType
(
CV_16UC1
),
MatType
(
CV_16UC3
),
MatType
(
CV_16UC4
),
MatType
(
CV_32FC1
),
MatType
(
CV_32FC3
),
MatType
(
CV_32FC4
)),
testing
::
Values
(
MatType
(
CV_8UC
1
),
MatType
(
CV_8UC3
),
MatType
(
CV_8UC4
),
MatType
(
CV_16UC1
),
MatType
(
CV_16UC3
),
MatType
(
CV_16UC4
),
MatType
(
CV_32FC1
),
MatType
(
CV_32FC3
),
MatType
(
CV_32FC4
)),
testing
::
Values
(
0.3
,
0.5
,
1.5
,
2.0
),
testing
::
Values
(
Interpolation
(
cv
::
INTER_NEAREST
),
Interpolation
(
cv
::
INTER_LINEAR
),
Interpolation
(
cv
::
INTER_CUBIC
)),
WHOLE_SUBMAT
));
...
...
@@ -201,50 +201,9 @@ GPU_TEST_P(ResizeSameAsHost, Accuracy)
INSTANTIATE_TEST_CASE_P
(
GPU_ImgProc
,
ResizeSameAsHost
,
testing
::
Combine
(
ALL_DEVICES
,
DIFFERENT_SIZES
,
testing
::
Values
(
MatType
(
CV_8UC
3
),
MatType
(
CV_16UC1
),
MatType
(
CV_16UC3
),
MatType
(
CV_16UC4
),
MatType
(
CV_32FC1
),
MatType
(
CV_32FC3
),
MatType
(
CV_32FC4
)),
testing
::
Values
(
MatType
(
CV_8UC
1
),
MatType
(
CV_8UC3
),
MatType
(
CV_8UC4
),
MatType
(
CV_16UC1
),
MatType
(
CV_16UC3
),
MatType
(
CV_16UC4
),
MatType
(
CV_32FC1
),
MatType
(
CV_32FC3
),
MatType
(
CV_32FC4
)),
testing
::
Values
(
0.3
,
0.5
),
testing
::
Values
(
Interpolation
(
cv
::
INTER_
AREA
),
Interpolation
(
cv
::
INTER_NEAREST
)),
//, Interpolation(cv::INTER_LINEAR), Interpolation(cv::INTER_CUBIC)
testing
::
Values
(
Interpolation
(
cv
::
INTER_
NEAREST
),
Interpolation
(
cv
::
INTER_AREA
)),
WHOLE_SUBMAT
));
///////////////////////////////////////////////////////////////////
// Test NPP
PARAM_TEST_CASE
(
ResizeNPP
,
cv
::
gpu
::
DeviceInfo
,
MatType
,
double
,
Interpolation
)
{
cv
::
gpu
::
DeviceInfo
devInfo
;
double
coeff
;
int
interpolation
;
int
type
;
virtual
void
SetUp
()
{
devInfo
=
GET_PARAM
(
0
);
type
=
GET_PARAM
(
1
);
coeff
=
GET_PARAM
(
2
);
interpolation
=
GET_PARAM
(
3
);
cv
::
gpu
::
setDevice
(
devInfo
.
deviceID
());
}
};
GPU_TEST_P
(
ResizeNPP
,
Accuracy
)
{
cv
::
Mat
src
=
readImageType
(
"stereobp/aloe-L.png"
,
type
);
ASSERT_FALSE
(
src
.
empty
());
cv
::
gpu
::
GpuMat
dst
;
cv
::
gpu
::
resize
(
loadMat
(
src
),
dst
,
cv
::
Size
(),
coeff
,
coeff
,
interpolation
);
cv
::
Mat
dst_gold
;
resizeGold
(
src
,
dst_gold
,
coeff
,
coeff
,
interpolation
);
EXPECT_MAT_SIMILAR
(
dst_gold
,
dst
,
1e-1
);
}
INSTANTIATE_TEST_CASE_P
(
GPU_ImgProc
,
ResizeNPP
,
testing
::
Combine
(
ALL_DEVICES
,
testing
::
Values
(
MatType
(
CV_8UC1
),
MatType
(
CV_8UC4
)),
testing
::
Values
(
0.3
,
0.5
,
1.5
,
2.0
),
testing
::
Values
(
Interpolation
(
cv
::
INTER_NEAREST
),
Interpolation
(
cv
::
INTER_LINEAR
))));
#endif // HAVE_CUDA
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录