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
53c9c40e
Commit
53c9c40e
authored
Jun 29, 2013
by
hbristow
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
started MxArray wrapper around mxArray class
parent
fc519aa3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
431 additions
and
111 deletions
+431
-111
template_function_base.cpp
...les/matlab/generator/templates/template_function_base.cpp
+1
-1
bridge.hpp
modules/matlab/include/bridge.hpp
+430
-110
No files found.
modules/matlab/generator/templates/template_function_base.cpp
View file @
53c9c40e
...
@@ -46,7 +46,7 @@ void mexFunction(int nlhs, mxArray* plhs[],
...
@@ -46,7 +46,7 @@ void mexFunction(int nlhs, mxArray* plhs[],
{
%-
if
noutputs
%
}
{
%-
if
noutputs
%
}
// push the outputs back to matlab
// push the outputs back to matlab
for
(
size_t
n
=
0
;
n
<
nlhs
;
++
n
)
{
for
(
size_t
n
=
0
;
n
<
nlhs
;
++
n
)
{
plhs
[
n
]
=
outputs
[
n
].
toMxArray
();
plhs
[
n
]
=
outputs
[
n
].
toMxArray
()
.
releaseOwnership
()
;
}
}
{
%
endif
%
}
{
%
endif
%
}
}
}
modules/matlab/include/bridge.hpp
View file @
53c9c40e
...
@@ -8,6 +8,27 @@
...
@@ -8,6 +8,27 @@
#include <opencv2/calib3d.hpp>
#include <opencv2/calib3d.hpp>
#include <ext/hash_map>
#include <ext/hash_map>
/*
* All recent versions of Matlab ship with the MKL library which contains
* a blas extension called mkl_?omatcopy(). This defines an out-of-place
* copy and transpose operation.
*
* The mkl library is in ${MATLAB_ROOT}/bin/${MATLAB_MEXEXT}/libmkl...
* Matlab does not ship headers for the mkl functions, so we define them
* here.
*
* This operation is used extensively to copy between Matlab's column-major
* format and OpenCV's row-major format.
*/
#ifdef __cplusplus
extern
"C"
{
#endif
void
mkl_somatcopy
(
char
,
char
,
size_t
,
size_t
,
const
float
,
const
float
*
,
size_t
,
float
*
,
size_t
);
void
mkl_domatcopy
(
char
,
char
,
size_t
,
size_t
,
const
double
,
const
double
*
,
size_t
,
double
*
,
size_t
);
#ifdef __cplusplus
}
#endif
/*
/*
* Custom typedefs
* Custom typedefs
* Parsed names from the hdr_parser
* Parsed names from the hdr_parser
...
@@ -29,6 +50,261 @@ void conditionalError(bool expr, const std::string& str) {
...
@@ -29,6 +50,261 @@ void conditionalError(bool expr, const std::string& str) {
if
(
!
expr
)
mexErrMsgTxt
(
std
::
string
(
"condition failed: "
).
append
(
str
).
c_str
());
if
(
!
expr
)
mexErrMsgTxt
(
std
::
string
(
"condition failed: "
).
append
(
str
).
c_str
());
}
}
void
error
(
const
std
::
string
&
str
)
{
mexErrMsgTxt
(
str
.
c_str
());
}
namespace
Matlab
{
class
DefaultTraits
{};
class
InheritType
{};
static
const
int
Dynamic
=
-
1
;
// --------------------------------------------------------------------------
// INTERNAL TRAITS CLASS
// --------------------------------------------------------------------------
template
<
typename
_Tp
=
DefaultTraits
>
class
Traits
{
public
:
static
const
mxClassID
ScalarType
=
mxUNKNOWN_CLASS
;
static
const
mxComplexity
Complex
=
mxCOMPLEX
;
static
const
mxComplexity
Real
=
mxCOMPLEX
;
};
// bool
template
<>
class
Traits
<
bool
>
{
public
:
static
const
mxClassID
ScalarType
=
mxLOGICAL_CLASS
;
};
// uint8_t
template
<>
class
Traits
<
uint8_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxUINT8_CLASS
;
};
// int8_t
template
<>
class
Traits
<
int8_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxINT8_CLASS
;
};
// uint16_t
template
<>
class
Traits
<
uint16_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxUINT16_CLASS
;
};
// int16_t
template
<>
class
Traits
<
int16_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxINT16_CLASS
;
};
// uint32_t
template
<>
class
Traits
<
uint32_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxUINT32_CLASS
;
};
// int32_t
template
<>
class
Traits
<
int32_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxINT32_CLASS
;
};
// uint64_t
template
<>
class
Traits
<
uint64_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxUINT64_CLASS
;
};
// int64_t
template
<>
class
Traits
<
int64_t
>
{
public
:
static
const
mxClassID
ScalarType
=
mxINT64_CLASS
;
};
// float
template
<>
class
Traits
<
float
>
{
public
:
static
const
mxClassID
ScalarType
=
mxSINGLE_CLASS
;
};
// double
template
<>
class
Traits
<
double
>
{
public
:
static
const
mxClassID
ScalarType
=
mxDOUBLE_CLASS
;
};
// size_t
template
<>
class
Traits
<
size_t
>
{
public
:
static
const
mxClassID
ScalarType
=
(
sizeof
(
size_t
)
==
4
)
?
mxUINT32_CLASS
:
mxUINT64_CLASS
;
};
// char
template
<>
class
Traits
<
char
>
{
public
:
static
const
mxClassID
ScalarType
=
mxCHAR_CLASS
;
};
};
// ----------------------------------------------------------------------------
// MXARRAY
// ----------------------------------------------------------------------------
/*!
* @class MxArray
* @brief A thin wrapper around Matlab's mxArray types
*
* MxArray provides a thin object oriented wrapper around Matlab's
* native mxArray type which exposes most of the functionality of the
* Matlab interface, but in a more C++ manner.
*/
class
MxArray
{
private
:
mxArray
*
ptr_
;
bool
owns_
;
public
:
MxArray
()
:
ptr_
(
NULL
),
owns_
(
false
)
{}
MxArray
(
const
mxArray
*
ptr
)
:
ptr_
(
const_cast
<
mxArray
*>
(
ptr
)),
owns_
(
false
)
{}
~
MxArray
()
{
if
(
owns_
&&
ptr_
)
mxDestroyArray
(
ptr_
);
}
/*
* @brief release ownership to allow return into Matlab workspace
*
* MxArray is not directly convertible back to mxArray types through assignment
* because the MxArray may have been allocated on the free store, making it impossible
* to know whether the returned pointer will be released by someone else or not.
*
* Since Matlab requires mxArrays be passed back into the workspace, the only way
* to achieve that is through this function, which explicitly releases ownership
* of the object, assuming the Matlab interpreter receving the object will delete
* it at a later time
*
* e.g.
* {
* MxArray A<double>(5, 5); // allocates memory
* MxArray B<double>(5, 5); // ditto
* plhs[0] = A; // not allowed!!
* plhs[0] = A.releaseOwnership(); // makes explicit that ownership is being released
* } // end of scope. B is released, A isn't
*
*/
mxArray
*
releaseOwnership
()
{
owns_
=
false
;
return
ptr_
;
}
// TODO: Make sure NULL pointers are checked in all functions!
template
<
typename
Scalar
>
explicit
MxArray
(
size_t
m
,
size_t
n
,
size_t
k
=
1
)
:
owns_
(
true
)
{
mwSize
dims
[]
=
{
m
,
n
,
k
};
ptr_
=
mxCreateNumericArray
(
3
,
dims
,
Matlab
::
Traits
<
Scalar
>::
ScalarType
,
Matlab
::
Traits
<>::
Real
);
}
template
<
typename
Scalar
>
explicit
MxArray
(
const
cv
::
Mat
&
mat
)
:
owns_
(
true
)
{
mwSize
dims
[]
=
{
mat
.
rows
,
mat
.
cols
,
mat
.
channels
()
};
if
(
mat
.
channels
()
==
2
)
{
ptr_
=
mxCreateNumericArray
(
2
,
dims
,
Matlab
::
Traits
<
Scalar
>::
ScalarType
,
Matlab
::
Traits
<>::
Complex
);
}
else
{
ptr_
=
mxCreateNumericArray
(
2
,
dims
,
Matlab
::
Traits
<
Scalar
>::
ScalarType
,
Matlab
::
Traits
<>::
Real
);
}
}
template
<
typename
Scalar
>
cv
::
Mat
toMat
()
const
{
cv
::
Mat
mat
(
cols
(),
rows
(),
CV_MAKETYPE
(
cv
::
DataType
<
Scalar
>::
type
,
channels
()));
return
mat
;
}
template
<
typename
Scalar
>
void
fromMat
(
const
cv
::
Mat
&
mat
)
{
}
MxArray
field
(
const
std
::
string
&
name
)
{
return
MxArray
(
mxGetField
(
ptr_
,
0
,
name
.
c_str
()));
}
template
<
typename
Scalar
>
Scalar
*
real
()
{
return
static_cast
<
Scalar
*>
(
mxGetData
(
ptr_
));
}
template
<
typename
Scalar
>
Scalar
*
imag
()
{
return
static_cast
<
Scalar
*>
(
mxGetData
(
ptr_
));
}
template
<
typename
Scalar
>
const
Scalar
*
real
()
const
{
return
static_cast
<
const
Scalar
*>
(
mxGetData
(
ptr_
));
}
template
<
typename
Scalar
>
const
Scalar
*
imag
()
const
{
return
static_cast
<
const
Scalar
*>
(
mxGetData
(
ptr_
));
}
template
<
typename
Scalar
>
Scalar
scalar
()
const
{
return
static_cast
<
Scalar
*>
(
mxGetData
(
ptr_
))[
0
];
}
std
::
string
toString
()
const
{
conditionalError
(
isString
(),
"Attempted to convert non-string type to string"
);
std
::
string
str
;
str
.
reserve
(
size
()
+
1
);
mxGetString
(
ptr_
,
const_cast
<
char
*>
(
str
.
data
()),
str
.
size
());
return
str
;
}
size_t
size
()
const
{
return
mxGetNumberOfElements
(
ptr_
);
}
size_t
rows
()
const
{
return
mxGetM
(
ptr_
);
}
size_t
cols
()
const
{
return
mxGetN
(
ptr_
);
}
size_t
channels
()
const
{
return
(
mxGetNumberOfDimensions
(
ptr_
)
>
2
)
?
mxGetDimensions
(
ptr_
)[
2
]
:
1
;
}
bool
isComplex
()
const
{
return
mxIsComplex
(
ptr_
);
}
bool
isNumeric
()
const
{
return
mxIsNumeric
(
ptr_
);
}
bool
isLogical
()
const
{
return
mxIsLogical
(
ptr_
);
}
bool
isString
()
const
{
return
mxIsChar
(
ptr_
);
}
bool
isCell
()
const
{
return
mxIsCell
(
ptr_
);
}
bool
isStructure
()
const
{
return
mxIsStruct
(
ptr_
);
}
bool
isClass
(
const
std
::
string
&
name
)
const
{
return
mxIsClass
(
ptr_
,
name
.
c_str
());
}
std
::
string
className
()
const
{
return
std
::
string
(
mxGetClassName
(
ptr_
));
}
mxClassID
ID
()
const
{
return
mxGetClassID
(
ptr_
);
}
};
template
<>
cv
::
Mat
MxArray
::
toMat
<
Matlab
::
InheritType
>
()
const
{
return
cv
::
Mat
();
}
template
<>
void
MxArray
::
fromMat
<
Matlab
::
InheritType
>
(
const
cv
::
Mat
&
mat
)
{
}
// ----------------------------------------------------------------------------
// MATRIX TRANSPOSE
// ----------------------------------------------------------------------------
template
<
typename
InputScalar
,
typename
OutputScalar
>
void
deepCopyAndTranspose
(
const
cv
::
Mat
&
src
,
MxArray
&
dst
)
{
}
template
<
typename
InputScalar
,
typename
OutputScalar
>
void
deepCopyAndTranspose
(
const
MxArray
&
src
,
cv
::
Mat
&
dst
)
{
}
template
<>
void
deepCopyAndTranspose
<
float
,
float
>
(
const
cv
::
Mat
&
src
,
MxArray
&
dst
)
{
}
template
<>
void
deepCopyAndTranspose
<
double
,
double
>
(
const
cv
::
Mat
&
src
,
MxArray
&
dst
)
{
}
template
<>
void
deepCopyAndTranspose
<
float
,
float
>
(
const
MxArray
&
src
,
cv
::
Mat
&
dst
)
{
}
template
<>
void
deepCopyAndTranspose
<
double
,
double
>
(
const
MxArray
&
src
,
cv
::
Mat
&
dst
)
{
}
// ----------------------------------------------------------------------------
// BRIDGE
// ----------------------------------------------------------------------------
/*!
/*!
* @class Bridge
* @class Bridge
* @brief Type conversion class for converting OpenCV and native C++ types
* @brief Type conversion class for converting OpenCV and native C++ types
...
@@ -48,6 +324,10 @@ void conditionalError(bool expr, const std::string& str) {
...
@@ -48,6 +324,10 @@ void conditionalError(bool expr, const std::string& str) {
* std and stl types to Matlab's mxArray format. By inheriting Bridge,
* std and stl types to Matlab's mxArray format. By inheriting Bridge,
* you can add your own custom type conversions.
* you can add your own custom type conversions.
*
*
* Because Matlab uses a homogeneous storage type, all operations are provided
* relative to Matlab's type. That is, Bridge always stores an MxArray object
* and converts to and from other object types on demand.
*
* NOTE: for the explicit conversion function, the object name must be
* NOTE: for the explicit conversion function, the object name must be
* in UpperCamelCase, for example:
* in UpperCamelCase, for example:
* int --> toInt
* int --> toInt
...
@@ -67,7 +347,7 @@ void conditionalError(bool expr, const std::string& str) {
...
@@ -67,7 +347,7 @@ void conditionalError(bool expr, const std::string& str) {
*/
*/
class
Bridge
{
class
Bridge
{
private
:
private
:
mxArray
*
ptr_
;
MxArray
ptr_
;
public
:
public
:
// bridges are default constructible
// bridges are default constructible
Bridge
()
{}
Bridge
()
{}
...
@@ -82,99 +362,58 @@ public:
...
@@ -82,99 +362,58 @@ public:
* NOTE! This function assumes that the C++ pointer is stored in inst_
* NOTE! This function assumes that the C++ pointer is stored in inst_
*/
*/
template
<
typename
Object
>
template
<
typename
Object
>
Object
*
getObjectByName
(
const
char
*
name
)
{
Object
*
getObjectByName
(
const
std
::
string
&
name
)
{
// check that the object is actually of correct type before unpacking
// check that the object is actually of correct type before unpacking
// TODO: Traverse class hierarchy?
// TODO: Traverse class hierarchy?
if
(
!
mxIsClass
(
ptr_
,
name
))
{
if
(
!
ptr_
.
isClass
(
name
))
{
const
char
*
actual
=
mxGetClassName
(
ptr_
);
error
(
std
::
string
(
"Expected class "
).
append
(
std
::
string
(
name
))
mexErrMsgTxt
(
std
::
string
(
"Expected class "
).
append
(
std
::
string
(
name
))
.
append
(
" but was given "
).
append
(
ptr_
.
className
()));
.
append
(
" but was given "
).
append
(
std
::
string
(
actual
)).
c_str
());
}
}
// get the instance field
// get the instance field
mxArray
*
inst
=
mxGetField
(
ptr_
,
0
,
"inst_"
);
MxArray
inst
=
ptr_
.
field
(
"inst_"
);
Object
*
obj
=
NULL
;
Object
*
obj
=
NULL
;
// make sure the pointer is the correct size for the system
// make sure the pointer is the correct size for the system
if
(
sizeof
(
void
*
)
==
8
&&
mxIsClass
(
inst
,
"uint64"
)
)
{
if
(
sizeof
(
void
*
)
==
8
&&
inst
.
ID
()
==
mxUINT64_CLASS
)
{
// 64-bit pointers
// 64-bit pointers
// TODO: Do we REALLY REALLY need to reinterpret_cast?
// TODO: Do we REALLY REALLY need to reinterpret_cast?
obj
=
reinterpret_cast
<
Object
*>
(
obj
=
reinterpret_cast
<
Object
*>
(
inst
.
scalar
<
uint64_t
>
());
reinterpret_cast
<
uint64_t
*>
(
mxGetData
(
inst
))[
0
]);
}
else
if
(
sizeof
(
void
*
)
==
4
&&
inst
.
ID
()
==
mxUINT32_CLASS
)
{
}
else
if
(
sizeof
(
void
*
)
==
4
&&
mxIsClass
(
inst
,
"uint32"
))
{
// 32-bit pointers
// 32-bit pointers
obj
=
reinterpret_cast
<
Object
*>
(
obj
=
reinterpret_cast
<
Object
*>
(
inst
.
scalar
<
uint32_t
>
());
reinterpret_cast
<
uint32_t
*>
(
mxGetData
(
inst
))[
0
]);
}
else
{
}
else
{
mexErrMsgTxt
(
"Incorrect pointer type stored for architecture"
);
error
(
"Incorrect pointer type stored for architecture"
);
}
}
// finally check if the object is NULL
// finally check if the object is NULL
if
(
!
obj
)
mexErrMsgTxt
(
std
::
string
(
"Object "
).
append
(
std
::
string
(
name
)).
append
(
std
::
string
(
" is NULL"
)).
c_str
(
));
conditionalError
(
obj
,
std
::
string
(
"Object "
).
append
(
std
::
string
(
name
)).
append
(
std
::
string
(
" is NULL"
)
));
return
obj
;
return
obj
;
}
}
// --------------------------- mxArray --------------------------------------
Bridge
&
operator
=
(
const
mxArray
*
obj
)
{
return
*
this
;
}
Bridge
(
const
mxArray
*
obj
)
{}
mxArray
*
toMxArray
()
{
return
NULL
;
}
// --------------------------- cv::Mat --------------------------------------
Bridge
&
operator
=
(
const
cv
::
Mat
&
obj
)
{
return
*
this
;
}
cv
::
Mat
toMat
()
{
return
cv
::
Mat
();
}
operator
cv
::
Mat
()
{
return
toMat
();
}
// -------------------- vector_Mat --------------------------------
Bridge
&
operator
=
(
const
vector_Mat
&
obj
)
{
return
*
this
;
}
vector_Mat
toVectorMat
()
{
return
vector_Mat
();
}
operator
vector_Mat
()
{
return
toVectorMat
();
}
// --------------------------- int --------------------------------------
Bridge
&
operator
=
(
const
int
&
obj
)
{
return
*
this
;
}
int
toInt
()
{
return
0
;
}
operator
int
()
{
return
toInt
();
}
// --------------------------- Ptr_StereoBM --------------------------------------
Bridge
&
operator
=
(
const
Ptr_StereoBM
&
obj
)
{
return
*
this
;
}
Ptr_StereoBM
toPtrStereoBM
()
{
return
Ptr_StereoBM
();
}
operator
Ptr_StereoBM
()
{
return
toPtrStereoBM
();
}
// --------------------------- Ptr_StereoSGBM --------------------------------------
Bridge
&
operator
=
(
const
Ptr_StereoSGBM
&
obj
)
{
return
*
this
;
}
Ptr_StereoSGBM
toPtrStereoSGBM
()
{
return
Ptr_StereoSGBM
();
}
operator
Ptr_StereoSGBM
()
{
return
toPtrStereoSGBM
();
}
// --------------------------- Ptr_FeatureDetector --------------------------------------
Bridge
&
operator
=
(
const
Ptr_FeatureDetector
&
obj
)
{
return
*
this
;
}
Ptr_FeatureDetector
toPtrFeatureDetector
()
{
return
Ptr_FeatureDetector
();
}
operator
Ptr_FeatureDetector
()
{
return
toPtrFeatureDetector
();
}
// --------------------------- vector_int ----------------------------------
Bridge
&
operator
=
(
const
vector_int
&
obj
)
{
return
*
this
;
}
vector_int
toVectorInt
()
{
return
vector_int
();
}
operator
vector_int
()
{
return
toVectorInt
();
}
// --------------------------- vector_float ----------------------------------
Bridge
&
operator
=
(
const
vector_float
&
obj
)
{
return
*
this
;
}
vector_float
toVectorFloat
()
{
return
vector_float
();
}
operator
vector_float
()
{
return
toVectorFloat
();
}
// --------------------------- vector_Rect ----------------------------------
Bridge
&
operator
=
(
const
vector_Rect
&
obj
)
{
return
*
this
;
}
vector_Rect
toVectorRect
()
{
return
vector_Rect
();
}
operator
vector_Rect
()
{
return
toVectorRect
();
}
// --------------------------- vector_KeyPoint ----------------------------------
Bridge
&
operator
=
(
const
vector_KeyPoint
&
obj
)
{
return
*
this
;
}
vector_KeyPoint
toVectorKeyPoint
()
{
return
vector_KeyPoint
();
}
operator
vector_KeyPoint
()
{
return
toVectorKeyPoint
();
}
// --------------------------- vector_String ----------------------------------
Bridge
&
operator
=
(
const
vector_String
&
obj
)
{
return
*
this
;
}
vector_String
toVectorString
()
{
return
vector_String
();
}
operator
vector_String
()
{
return
toVectorString
();
}
// --------------------------------------------------------------------------
// MATLAB TYPES
// --------------------------------------------------------------------------
Bridge
&
operator
=
(
const
mxArray
*
obj
)
{
return
*
this
;
}
Bridge
(
const
mxArray
*
obj
)
:
ptr_
(
obj
)
{}
MxArray
toMxArray
()
{
return
ptr_
;
}
// --------------------------------------------------------------------------
// INTEGRAL TYPES
// --------------------------------------------------------------------------
// --------------------------- string --------------------------------------
// --------------------------- string --------------------------------------
Bridge
&
operator
=
(
const
std
::
string
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
std
::
string
&
obj
)
{
return
*
this
;
}
std
::
string
toString
()
{
return
""
;
}
std
::
string
toString
()
{
return
ptr_
.
toString
();
}
operator
std
::
string
()
{
return
toString
();
}
operator
std
::
string
()
{
return
toString
();
}
// --------------------------- bool --------------------------------------
// --------------------------- bool --------------------------------------
...
@@ -184,70 +423,78 @@ public:
...
@@ -184,70 +423,78 @@ public:
// --------------------------- double --------------------------------------
// --------------------------- double --------------------------------------
Bridge
&
operator
=
(
const
double
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
double
&
obj
)
{
return
*
this
;
}
double
toDouble
()
{
return
0
;
}
double
toDouble
()
{
return
ptr_
.
scalar
<
double
>
()
;
}
operator
double
()
{
return
toDouble
();
}
operator
double
()
{
return
toDouble
();
}
// --------------------------- float --------------------------------------
// --------------------------- float --------------------------------------
-
Bridge
&
operator
=
(
const
float
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
float
&
obj
)
{
return
*
this
;
}
float
toFloat
()
{
return
0
;
}
float
toFloat
()
{
return
ptr_
.
scalar
<
float
>
()
;
}
operator
float
()
{
return
toFloat
();
}
operator
float
()
{
return
toFloat
();
}
// --------------------------- int --------------------------------------
Bridge
&
operator
=
(
const
int
&
obj
)
{
return
*
this
;
}
int
toInt
()
{
return
ptr_
.
scalar
<
int
>
();
}
operator
int
()
{
return
toInt
();
}
// --------------------------------------------------------------------------
// CORE OPENCV TYPES
// --------------------------------------------------------------------------
// --------------------------- cv::Mat --------------------------------------
Bridge
&
operator
=
(
const
cv
::
Mat
&
obj
)
{
return
*
this
;
}
cv
::
Mat
toMat
()
const
{
return
ptr_
.
toMat
<
Matlab
::
InheritType
>
();
}
operator
cv
::
Mat
()
const
{
return
toMat
();
}
// -------------------------- Point --------------------------------------
// -------------------------- Point --------------------------------------
Bridge
&
operator
=
(
const
cv
::
Point
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Point
&
obj
)
{
return
*
this
;
}
cv
::
Point
toPoint
()
{
return
cv
::
Point
();
}
cv
::
Point
toPoint
()
const
{
return
cv
::
Point
();
}
operator
cv
::
Point
()
{
return
toPoint
();
}
operator
cv
::
Point
()
const
{
return
toPoint
();
}
// -------------------------- Point2f ------------------------------------
// -------------------------- Point2f ------------------------------------
Bridge
&
operator
=
(
const
cv
::
Point2f
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Point2f
&
obj
)
{
return
*
this
;
}
cv
::
Point2f
toPoint2f
()
{
return
cv
::
Point2f
();
}
cv
::
Point2f
toPoint2f
()
const
{
return
cv
::
Point2f
();
}
operator
cv
::
Point2f
()
{
return
toPoint2f
();
}
operator
cv
::
Point2f
()
const
{
return
toPoint2f
();
}
// -------------------------- Point2d ------------------------------------
// -------------------------- Point2d ------------------------------------
Bridge
&
operator
=
(
const
cv
::
Point2d
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Point2d
&
obj
)
{
return
*
this
;
}
cv
::
Point2d
toPoint2d
()
{
return
cv
::
Point2d
();
}
cv
::
Point2d
toPoint2d
()
const
{
return
cv
::
Point2d
();
}
operator
cv
::
Point2d
()
{
return
toPoint2d
();
}
operator
cv
::
Point2d
()
const
{
return
toPoint2d
();
}
// -------------------------- Size ---------------------------------------
// -------------------------- Size ---------------------------------------
Bridge
&
operator
=
(
const
cv
::
Size
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Size
&
obj
)
{
return
*
this
;
}
cv
::
Size
toSize
()
{
return
cv
::
Size
();
}
cv
::
Size
toSize
()
const
{
return
cv
::
Size
();
}
operator
cv
::
Size
()
{
return
toSize
();
}
operator
cv
::
Size
()
const
{
return
toSize
();
}
// -------------------------- Moments --------------------------------------
-
// -------------------------- Moments --------------------------------------
Bridge
&
operator
=
(
const
cv
::
Moments
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Moments
&
obj
)
{
return
*
this
;
}
cv
::
Moments
toMoments
()
{
return
cv
::
Moments
();
}
cv
::
Moments
toMoments
()
const
{
return
cv
::
Moments
();
}
operator
cv
::
Moments
()
{
return
toMoments
();
}
operator
cv
::
Moments
()
const
{
return
toMoments
();
}
// ------------------------ vector_Point ------------------------------------
Bridge
&
operator
=
(
const
vector_Point
&
obj
)
{
return
*
this
;
}
vector_Point
toVectorPoint
()
{
return
vector_Point
();
}
operator
vector_Point
()
{
return
toVectorPoint
();
}
// ------------------------ vector_uchar -------------------------------------
Bridge
&
operator
=
(
const
vector_uchar
&
obj
)
{
return
*
this
;
}
vector_uchar
toVectorUchar
()
{
return
vector_uchar
();
}
operator
vector_uchar
()
{
return
toVectorUchar
();
}
// -------------------------- Scalar --------------------------------------
// -------------------------- Scalar --------------------------------------
Bridge
&
operator
=
(
const
cv
::
Scalar
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Scalar
&
obj
)
{
return
*
this
;
}
cv
::
Scalar
toScalar
()
{
return
cv
::
Scalar
();
}
cv
::
Scalar
toScalar
()
{
return
cv
::
Scalar
();
}
operator
cv
::
Scalar
()
{
return
toScalar
();
}
operator
cv
::
Scalar
()
{
return
toScalar
();
}
// -------------------------- Rect --------------------------------------
// -------------------------- Rect --------------------------------------
---
Bridge
&
operator
=
(
const
cv
::
Rect
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
Rect
&
obj
)
{
return
*
this
;
}
cv
::
Rect
toRect
()
{
return
cv
::
Rect
();
}
cv
::
Rect
toRect
()
{
return
cv
::
Rect
();
}
operator
cv
::
Rect
()
{
return
toRect
();
}
operator
cv
::
Rect
()
{
return
toRect
();
}
// ---------------------- RotatedRect ------------------------------------
// ---------------------- RotatedRect ------------------------------------
---
Bridge
&
operator
=
(
const
cv
::
RotatedRect
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
RotatedRect
&
obj
)
{
return
*
this
;
}
cv
::
RotatedRect
toRotatedRect
()
{
return
cv
::
RotatedRect
();
}
cv
::
RotatedRect
toRotatedRect
()
{
return
cv
::
RotatedRect
();
}
operator
cv
::
RotatedRect
()
{
return
toRotatedRect
();
}
operator
cv
::
RotatedRect
()
{
return
toRotatedRect
();
}
// ---------------------- TermCriteria -----------------------------------
// ---------------------- TermCriteria -----------------------------------
---
Bridge
&
operator
=
(
const
cv
::
TermCriteria
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
TermCriteria
&
obj
)
{
return
*
this
;
}
cv
::
TermCriteria
toTermCriteria
()
{
return
cv
::
TermCriteria
();
}
cv
::
TermCriteria
toTermCriteria
()
{
return
cv
::
TermCriteria
();
}
operator
cv
::
TermCriteria
()
{
return
toTermCriteria
();
}
operator
cv
::
TermCriteria
()
{
return
toTermCriteria
();
}
// ---------------------- RNG -----------------------------------
// ---------------------- RNG -----------------------------------
---
Bridge
&
operator
=
(
const
cv
::
RNG
&
obj
)
{
return
*
this
;
}
Bridge
&
operator
=
(
const
cv
::
RNG
&
obj
)
{
return
*
this
;
}
/*! @brief explicit conversion to cv::RNG()
/*! @brief explicit conversion to cv::RNG()
*
*
...
@@ -255,11 +502,84 @@ public:
...
@@ -255,11 +502,84 @@ public:
* the object is an RNG in matlab space before attempting to deference
* the object is an RNG in matlab space before attempting to deference
* its pointer
* its pointer
*/
*/
cv
::
RNG
toRNG
()
{
cv
::
RNG
toRNG
()
{
return
(
*
getObjectByName
<
cv
::
RNG
>
(
"RNG"
));
return
(
*
getObjectByName
<
cv
::
RNG
>
(
"RNG"
));
}
}
operator
cv
::
RNG
()
{
return
toRNG
();
}
operator
cv
::
RNG
()
{
return
toRNG
();
}
// --------------------------------------------------------------------------
// OPENCV VECTOR TYPES
// --------------------------------------------------------------------------
// -------------------- vector_Mat ------------------------------------------
Bridge
&
operator
=
(
const
vector_Mat
&
obj
)
{
return
*
this
;
}
vector_Mat
toVectorMat
()
{
return
vector_Mat
();
}
operator
vector_Mat
()
{
return
toVectorMat
();
}
// --------------------------- vector_int ----------------------------------
Bridge
&
operator
=
(
const
vector_int
&
obj
)
{
return
*
this
;
}
vector_int
toVectorInt
()
{
return
vector_int
();
}
operator
vector_int
()
{
return
toVectorInt
();
}
// --------------------------- vector_float --------------------------------
Bridge
&
operator
=
(
const
vector_float
&
obj
)
{
return
*
this
;
}
vector_float
toVectorFloat
()
{
return
vector_float
();
}
operator
vector_float
()
{
return
toVectorFloat
();
}
// --------------------------- vector_Rect ---------------------------------
Bridge
&
operator
=
(
const
vector_Rect
&
obj
)
{
return
*
this
;
}
vector_Rect
toVectorRect
()
{
return
vector_Rect
();
}
operator
vector_Rect
()
{
return
toVectorRect
();
}
// --------------------------- vector_KeyPoint -----------------------------
Bridge
&
operator
=
(
const
vector_KeyPoint
&
obj
)
{
return
*
this
;
}
vector_KeyPoint
toVectorKeyPoint
()
{
return
vector_KeyPoint
();
}
operator
vector_KeyPoint
()
{
return
toVectorKeyPoint
();
}
// --------------------------- vector_String -------------------------------
Bridge
&
operator
=
(
const
vector_String
&
obj
)
{
return
*
this
;
}
vector_String
toVectorString
()
{
return
vector_String
();
}
operator
vector_String
()
{
return
toVectorString
();
}
// ------------------------ vector_Point ------------------------------------
Bridge
&
operator
=
(
const
vector_Point
&
obj
)
{
return
*
this
;
}
vector_Point
toVectorPoint
()
{
return
vector_Point
();
}
operator
vector_Point
()
{
return
toVectorPoint
();
}
// ------------------------ vector_uchar ------------------------------------
Bridge
&
operator
=
(
const
vector_uchar
&
obj
)
{
return
*
this
;
}
vector_uchar
toVectorUchar
()
{
return
vector_uchar
();
}
operator
vector_uchar
()
{
return
toVectorUchar
();
}
// --------------------------------------------------------------------------
// OPENCV COMPLEX TYPES
// --------------------------------------------------------------------------
// --------------------------- Ptr_StereoBM -----------------------------
Bridge
&
operator
=
(
const
Ptr_StereoBM
&
obj
)
{
return
*
this
;
}
Ptr_StereoBM
toPtrStereoBM
()
{
return
Ptr_StereoBM
();
}
operator
Ptr_StereoBM
()
{
return
toPtrStereoBM
();
}
// --------------------------- Ptr_StereoSGBM ---------------------------
Bridge
&
operator
=
(
const
Ptr_StereoSGBM
&
obj
)
{
return
*
this
;
}
Ptr_StereoSGBM
toPtrStereoSGBM
()
{
return
Ptr_StereoSGBM
();
}
operator
Ptr_StereoSGBM
()
{
return
toPtrStereoSGBM
();
}
// --------------------------- Ptr_FeatureDetector ----------------------
Bridge
&
operator
=
(
const
Ptr_FeatureDetector
&
obj
)
{
return
*
this
;
}
Ptr_FeatureDetector
toPtrFeatureDetector
()
{
return
Ptr_FeatureDetector
();
}
operator
Ptr_FeatureDetector
()
{
return
toPtrFeatureDetector
();
}
};
};
#endif
#endif
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