Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
12e0bc0f
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
12e0bc0f
编写于
11月 24, 2016
作者:
V
Vitaly Tuzov
提交者:
Vadim Pisarevsky
11月 24, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added wrappers for vx_matrix and vx_convolution (#7651)
上级
4c5c7229
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
342 addition
and
0 deletion
+342
-0
3rdparty/openvx/include/ivx.hpp
3rdparty/openvx/include/ivx.hpp
+342
-0
未找到文件。
3rdparty/openvx/include/ivx.hpp
浏览文件 @
12e0bc0f
...
...
@@ -199,6 +199,27 @@ template<> struct TypeToEnum<vx_bool> { static const vx_enum value = VX_TYPE
//template<> struct TypeToEnum<vx_size> { static const vx_enum val = VX_TYPE_SIZE; };
//template<> struct TypeToEnum<vx_df_image> { static const vx_enum val = VX_TYPE_DF_IMAGE; };
#ifdef IVX_USE_OPENCV
inline
int
enumToCVType
(
vx_enum
type
)
{
switch
(
type
)
{
case
VX_TYPE_CHAR
:
return
CV_8UC1
;
//While OpenCV support 8S as well, 8U is supported wider
case
VX_TYPE_INT8
:
return
CV_8SC1
;
case
VX_TYPE_UINT8
:
return
CV_8UC1
;
case
VX_TYPE_INT16
:
return
CV_16SC1
;
case
VX_TYPE_UINT16
:
return
CV_16UC1
;
case
VX_TYPE_INT32
:
return
CV_32SC1
;
case
VX_TYPE_UINT32
:
return
CV_32SC1
;
//That's not the best option but there is CV_32S type only
case
VX_TYPE_FLOAT32
:
return
CV_32FC1
;
case
VX_TYPE_FLOAT64
:
return
CV_64FC1
;
case
VX_TYPE_ENUM
:
return
CV_32SC1
;
case
VX_TYPE_BOOL
:
return
CV_32SC1
;
default:
throw
WrapperError
(
std
::
string
(
__func__
)
+
": unsupported type enum"
);
}
}
#endif
/// Helper type, provides info for OpenVX 'objects' (vx_reference extending) types
template
<
typename
T
>
struct
RefTypeTraits
{};
...
...
@@ -283,6 +304,24 @@ template <> struct RefTypeTraits <vx_threshold>
static
vx_status
release
(
vxType
&
ref
)
{
return
vxReleaseThreshold
(
&
ref
);
}
};
class
Convolution
;
template
<
>
struct
RefTypeTraits
<
vx_convolution
>
{
typedef
vx_convolution
vxType
;
typedef
Convolution
wrapperType
;
static
const
vx_enum
vxTypeEnum
=
VX_TYPE_CONVOLUTION
;
static
vx_status
release
(
vxType
&
ref
)
{
return
vxReleaseConvolution
(
&
ref
);
}
};
class
Matrix
;
template
<
>
struct
RefTypeTraits
<
vx_matrix
>
{
typedef
vx_matrix
vxType
;
typedef
Matrix
wrapperType
;
static
const
vx_enum
vxTypeEnum
=
VX_TYPE_MATRIX
;
static
vx_status
release
(
vxType
&
ref
)
{
return
vxReleaseMatrix
(
&
ref
);
}
};
#ifdef IVX_USE_CXX98
/// Casting to vx_reference with compile-time check
...
...
@@ -1656,6 +1695,309 @@ public:
{
return
Array
(
vxCreateVirtualArray
(
g
,
type
,
capacity
));
}
};
/*
* Convolution
*/
class
Convolution
:
public
RefWrapper
<
vx_convolution
>
{
public:
IVX_REF_STD_CTORS_AND_ASSIGNMENT
(
Convolution
);
static
Convolution
create
(
vx_context
context
,
vx_size
columns
,
vx_size
rows
)
{
return
Convolution
(
vxCreateConvolution
(
context
,
columns
,
rows
));
}
#ifndef VX_VERSION_1_1
static
const
vx_enum
VX_MEMORY_TYPE_HOST
=
VX_IMPORT_TYPE_HOST
,
VX_CONVOLUTION_ROWS
=
VX_CONVOLUTION_ATTRIBUTE_ROWS
,
VX_CONVOLUTION_COLUMNS
=
VX_CONVOLUTION_ATTRIBUTE_COLUMNS
,
VX_CONVOLUTION_SCALE
=
VX_CONVOLUTION_ATTRIBUTE_SCALE
,
VX_CONVOLUTION_SIZE
=
VX_CONVOLUTION_ATTRIBUTE_SIZE
;
#endif
template
<
typename
T
>
void
query
(
vx_enum
att
,
T
&
value
)
const
{
IVX_CHECK_STATUS
(
vxQueryConvolution
(
ref
,
att
,
&
value
,
sizeof
(
value
))
);
}
vx_size
columns
()
const
{
vx_size
v
;
query
(
VX_CONVOLUTION_COLUMNS
,
v
);
return
v
;
}
vx_size
rows
()
const
{
vx_size
v
;
query
(
VX_CONVOLUTION_ROWS
,
v
);
return
v
;
}
vx_uint32
scale
()
const
{
vx_uint32
v
;
query
(
VX_CONVOLUTION_SCALE
,
v
);
return
v
;
}
vx_size
size
()
const
{
vx_size
v
;
query
(
VX_CONVOLUTION_SIZE
,
v
);
return
v
;
}
vx_enum
dataType
()
{
return
VX_TYPE_INT16
;
}
void
copyTo
(
void
*
data
)
{
if
(
!
data
)
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): output pointer is 0"
);
#ifdef VX_VERSION_1_1
IVX_CHECK_STATUS
(
vxCopyConvolutionCoefficients
(
ref
,
data
,
VX_READ_ONLY
,
VX_MEMORY_TYPE_HOST
));
#else
IVX_CHECK_STATUS
(
vxReadConvolutionCoefficients
(
ref
,
(
vx_int16
*
)
data
));
#endif
}
void
copyFrom
(
const
void
*
data
)
{
if
(
!
data
)
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): input pointer is 0"
);
#ifdef VX_VERSION_1_1
IVX_CHECK_STATUS
(
vxCopyConvolutionCoefficients
(
ref
,
const_cast
<
void
*>
(
data
),
VX_WRITE_ONLY
,
VX_MEMORY_TYPE_HOST
));
#else
IVX_CHECK_STATUS
(
vxWriteConvolutionCoefficients
(
ref
,
(
const
vx_int16
*
)
data
));
#endif
}
void
copy
(
void
*
data
,
vx_enum
usage
,
vx_enum
memType
=
VX_MEMORY_TYPE_HOST
)
{
if
(
!
data
)
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): data pointer is 0"
);
#ifdef VX_VERSION_1_1
IVX_CHECK_STATUS
(
vxCopyConvolutionCoefficients
(
ref
,
data
,
usage
,
memType
));
#else
if
(
usage
==
VX_READ_ONLY
)
IVX_CHECK_STATUS
(
vxReadConvolutionCoefficients
(
ref
,
(
vx_int16
*
)
data
));
else
if
(
usage
==
VX_WRITE_ONLY
)
IVX_CHECK_STATUS
(
vxWriteConvolutionCoefficients
(
ref
,
(
const
vx_int16
*
)
data
));
else
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): unknown copy direction"
);
(
void
)
memType
;
#endif
}
template
<
typename
T
>
void
copyTo
(
std
::
vector
<
T
>&
data
)
{
if
(
TypeToEnum
<
T
>::
value
!=
dataType
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination type is wrong"
);
if
(
data
.
size
()
!=
size
())
{
if
(
data
.
size
()
==
0
)
data
.
resize
(
size
());
else
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination size is wrong"
);
}
copyTo
(
&
data
[
0
]);
}
template
<
typename
T
>
void
copyFrom
(
const
std
::
vector
<
T
>&
data
)
{
if
(
TypeToEnum
<
T
>::
value
!=
dataType
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source type is wrong"
);
if
(
data
.
size
()
!=
size
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source size is wrong"
);
copyFrom
(
&
data
[
0
]);
}
#ifdef IVX_USE_OPENCV
void
copyTo
(
cv
::
Mat
&
m
)
{
if
(
m
.
type
()
!=
enumToCVType
(
dataType
()))
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination type is wrong"
);
if
(((
vx_size
)(
m
.
rows
)
!=
rows
()
||
(
vx_size
)(
m
.
cols
)
!=
columns
())
&&
!
m
.
empty
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination size is wrong"
);
if
(
m
.
isContinuous
()
&&
(
vx_size
)(
m
.
rows
)
==
rows
()
&&
(
vx_size
)(
m
.
cols
)
==
columns
())
{
copyTo
(
m
.
ptr
());
}
else
{
cv
::
Mat
tmp
((
int
)
rows
(),
(
int
)
columns
(),
enumToCVType
(
dataType
()));
copyTo
(
tmp
.
ptr
());
if
(
m
.
empty
())
m
=
tmp
;
else
tmp
.
copyTo
(
m
);
}
}
void
copyFrom
(
const
cv
::
Mat
&
m
)
{
if
((
vx_size
)(
m
.
rows
)
!=
rows
()
||
(
vx_size
)(
m
.
cols
)
!=
columns
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source size is wrong"
);
if
(
m
.
type
()
!=
enumToCVType
(
dataType
()))
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source type is wrong"
);
copyFrom
(
m
.
isContinuous
()
?
m
.
ptr
()
:
m
.
clone
().
ptr
());
}
#endif //IVX_USE_OPENCV
};
/*
* Matrix
*/
class
Matrix
:
public
RefWrapper
<
vx_matrix
>
{
public:
IVX_REF_STD_CTORS_AND_ASSIGNMENT
(
Matrix
);
static
Matrix
create
(
vx_context
context
,
vx_enum
dataType
,
vx_size
columns
,
vx_size
rows
)
{
return
Matrix
(
vxCreateMatrix
(
context
,
dataType
,
columns
,
rows
));
}
#ifdef VX_VERSION_1_1
static
Matrix
createFromPattern
(
vx_context
context
,
vx_enum
pattern
,
vx_size
columns
,
vx_size
rows
)
{
return
Matrix
(
vxCreateMatrixFromPattern
(
context
,
pattern
,
columns
,
rows
));
}
#endif
#ifndef VX_VERSION_1_1
static
const
vx_enum
VX_MEMORY_TYPE_HOST
=
VX_IMPORT_TYPE_HOST
,
VX_MATRIX_TYPE
=
VX_MATRIX_ATTRIBUTE_TYPE
,
VX_MATRIX_ROWS
=
VX_MATRIX_ATTRIBUTE_ROWS
,
VX_MATRIX_COLUMNS
=
VX_MATRIX_ATTRIBUTE_COLUMNS
,
VX_MATRIX_SIZE
=
VX_MATRIX_ATTRIBUTE_SIZE
;
#endif
template
<
typename
T
>
void
query
(
vx_enum
att
,
T
&
value
)
const
{
IVX_CHECK_STATUS
(
vxQueryMatrix
(
ref
,
att
,
&
value
,
sizeof
(
value
))
);
}
vx_enum
dataType
()
const
{
vx_enum
v
;
query
(
VX_MATRIX_TYPE
,
v
);
return
v
;
}
vx_size
columns
()
const
{
vx_size
v
;
query
(
VX_MATRIX_COLUMNS
,
v
);
return
v
;
}
vx_size
rows
()
const
{
vx_size
v
;
query
(
VX_MATRIX_ROWS
,
v
);
return
v
;
}
vx_size
size
()
const
{
vx_size
v
;
query
(
VX_MATRIX_SIZE
,
v
);
return
v
;
}
#ifdef VX_VERSION_1_1
vx_coordinates2d_t
origin
()
const
{
vx_coordinates2d_t
v
;
query
(
VX_MATRIX_ORIGIN
,
v
);
return
v
;
}
vx_enum
pattern
()
const
{
vx_enum
v
;
query
(
VX_MATRIX_PATTERN
,
v
);
return
v
;
}
#endif // VX_VERSION_1_1
void
copyTo
(
void
*
data
)
{
if
(
!
data
)
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): output pointer is 0"
);
#ifdef VX_VERSION_1_1
IVX_CHECK_STATUS
(
vxCopyMatrix
(
ref
,
data
,
VX_READ_ONLY
,
VX_MEMORY_TYPE_HOST
));
#else
IVX_CHECK_STATUS
(
vxReadMatrix
(
ref
,
data
));
#endif
}
void
copyFrom
(
const
void
*
data
)
{
if
(
!
data
)
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): input pointer is 0"
);
#ifdef VX_VERSION_1_1
IVX_CHECK_STATUS
(
vxCopyMatrix
(
ref
,
const_cast
<
void
*>
(
data
),
VX_WRITE_ONLY
,
VX_MEMORY_TYPE_HOST
));
#else
IVX_CHECK_STATUS
(
vxWriteMatrix
(
ref
,
data
));
#endif
}
void
copy
(
void
*
data
,
vx_enum
usage
,
vx_enum
memType
=
VX_MEMORY_TYPE_HOST
)
{
if
(
!
data
)
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): data pointer is 0"
);
#ifdef VX_VERSION_1_1
IVX_CHECK_STATUS
(
vxCopyMatrix
(
ref
,
data
,
usage
,
memType
));
#else
if
(
usage
==
VX_READ_ONLY
)
IVX_CHECK_STATUS
(
vxReadMatrix
(
ref
,
data
));
else
if
(
usage
==
VX_WRITE_ONLY
)
IVX_CHECK_STATUS
(
vxWriteMatrix
(
ref
,
data
));
else
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): unknown copy direction"
);
(
void
)
memType
;
#endif
}
template
<
typename
T
>
void
copyTo
(
std
::
vector
<
T
>&
data
)
{
if
(
TypeToEnum
<
T
>::
value
!=
dataType
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination type is wrong"
);
if
(
data
.
size
()
!=
size
())
{
if
(
data
.
size
()
==
0
)
data
.
resize
(
size
());
else
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination size is wrong"
);
}
copyTo
(
&
data
[
0
]);
}
template
<
typename
T
>
void
copyFrom
(
const
std
::
vector
<
T
>&
data
)
{
if
(
TypeToEnum
<
T
>::
value
!=
dataType
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source type is wrong"
);
if
(
data
.
size
()
!=
size
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source size is wrong"
);
copyFrom
(
&
data
[
0
]);
}
#ifdef IVX_USE_OPENCV
void
copyTo
(
cv
::
Mat
&
m
)
{
if
(
m
.
type
()
!=
enumToCVType
(
dataType
()))
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination type is wrong"
);
if
(((
vx_size
)(
m
.
rows
)
!=
rows
()
||
(
vx_size
)(
m
.
cols
)
!=
columns
())
&&
!
m
.
empty
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): destination size is wrong"
);
if
(
m
.
isContinuous
()
&&
(
vx_size
)(
m
.
rows
)
==
rows
()
&&
(
vx_size
)(
m
.
cols
)
==
columns
())
{
copyTo
(
m
.
ptr
());
}
else
{
cv
::
Mat
tmp
((
int
)
rows
(),
(
int
)
columns
(),
enumToCVType
(
dataType
()));
copyTo
(
tmp
.
ptr
());
if
(
m
.
empty
())
m
=
tmp
;
else
tmp
.
copyTo
(
m
);
}
}
void
copyFrom
(
const
cv
::
Mat
&
m
)
{
if
((
vx_size
)(
m
.
rows
)
!=
rows
()
||
(
vx_size
)(
m
.
cols
)
!=
columns
())
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source size is wrong"
);
if
(
m
.
type
()
!=
enumToCVType
(
dataType
()))
throw
WrapperError
(
std
::
string
(
__func__
)
+
"(): source type is wrong"
);
copyFrom
(
m
.
isContinuous
()
?
m
.
ptr
()
:
m
.
clone
().
ptr
());
}
#endif //IVX_USE_OPENCV
};
/// Standard nodes
namespace
nodes
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录