@ -1235,7 +1235,7 @@ Mat _InputArray::getMat_(int i) const
return ( Mat ) * ( ( const MatExpr * ) obj ) ;
return ( Mat ) * ( ( const MatExpr * ) obj ) ;
}
}
if ( k = = MATX )
if ( k = = MATX | | k = = STD_ARRAY )
{
{
CV_Assert ( i < 0 ) ;
CV_Assert ( i < 0 ) ;
return Mat ( sz , flags , obj ) ;
return Mat ( sz , flags , obj ) ;
@ -1286,6 +1286,14 @@ Mat _InputArray::getMat_(int i) const
return v [ i ] ;
return v [ i ] ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * v = ( const Mat * ) obj ;
CV_Assert ( 0 < = i & & i < sz . height ) ;
return v [ i ] ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & v = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & v = * ( const std : : vector < UMat > * ) obj ;
@ -1381,7 +1389,7 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
return ;
return ;
}
}
if ( k = = MATX )
if ( k = = MATX | | k = = STD_ARRAY )
{
{
size_t n = sz . height , esz = CV_ELEM_SIZE ( flags ) ;
size_t n = sz . height , esz = CV_ELEM_SIZE ( flags ) ;
mv . resize ( n ) ;
mv . resize ( n ) ;
@ -1436,6 +1444,17 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
return ;
return ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * v = ( const Mat * ) obj ;
size_t n = sz . height ;
mv . resize ( n ) ;
for ( size_t i = 0 ; i < n ; i + + )
mv [ i ] = v [ i ] ;
return ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & v = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & v = * ( const std : : vector < UMat > * ) obj ;
@ -1472,6 +1491,17 @@ void _InputArray::getUMatVector(std::vector<UMat>& umv) const
return ;
return ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * v = ( const Mat * ) obj ;
size_t n = sz . height ;
umv . resize ( n ) ;
for ( size_t i = 0 ; i < n ; i + + )
umv [ i ] = v [ i ] . getUMat ( accessFlags ) ;
return ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & v = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & v = * ( const std : : vector < UMat > * ) obj ;
@ -1584,7 +1614,7 @@ Size _InputArray::size(int i) const
return ( ( const UMat * ) obj ) - > size ( ) ;
return ( ( const UMat * ) obj ) - > size ( ) ;
}
}
if ( k = = MATX )
if ( k = = MATX | | k = = STD_ARRAY )
{
{
CV_Assert ( i < 0 ) ;
CV_Assert ( i < 0 ) ;
return sz ;
return sz ;
@ -1631,6 +1661,16 @@ Size _InputArray::size(int i) const
return vv [ i ] . size ( ) ;
return vv [ i ] . size ( ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
if ( i < 0 )
return sz . height = = 0 ? Size ( ) : Size ( sz . height , 1 ) ;
CV_Assert ( i < sz . height ) ;
return vv [ i ] . size ( ) ;
}
if ( k = = STD_VECTOR_CUDA_GPU_MAT )
if ( k = = STD_VECTOR_CUDA_GPU_MAT )
{
{
const std : : vector < cuda : : GpuMat > & vv = * ( const std : : vector < cuda : : GpuMat > * ) obj ;
const std : : vector < cuda : : GpuMat > & vv = * ( const std : : vector < cuda : : GpuMat > * ) obj ;
@ -1709,6 +1749,16 @@ int _InputArray::sizend(int* arrsz, int i) const
for ( j = 0 ; j < d ; j + + )
for ( j = 0 ; j < d ; j + + )
arrsz [ j ] = m . size . p [ j ] ;
arrsz [ j ] = m . size . p [ j ] ;
}
}
else if ( k = = STD_ARRAY_MAT & & i > = 0 )
{
const Mat * vv = ( const Mat * ) obj ;
CV_Assert ( i < sz . height ) ;
const Mat & m = vv [ i ] ;
d = m . dims ;
if ( arrsz )
for ( j = 0 ; j < d ; j + + )
arrsz [ j ] = m . size . p [ j ] ;
}
else if ( k = = STD_VECTOR_UMAT & & i > = 0 )
else if ( k = = STD_VECTOR_UMAT & & i > = 0 )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -1789,7 +1839,7 @@ int _InputArray::dims(int i) const
return ( ( const UMat * ) obj ) - > dims ;
return ( ( const UMat * ) obj ) - > dims ;
}
}
if ( k = = MATX )
if ( k = = MATX | | k = = STD_ARRAY )
{
{
CV_Assert ( i < 0 ) ;
CV_Assert ( i < 0 ) ;
return 2 ;
return 2 ;
@ -1823,6 +1873,16 @@ int _InputArray::dims(int i) const
return vv [ i ] . dims ;
return vv [ i ] . dims ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
if ( i < 0 )
return 1 ;
CV_Assert ( i < sz . height ) ;
return vv [ i ] . dims ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -1881,6 +1941,15 @@ size_t _InputArray::total(int i) const
return vv [ i ] . total ( ) ;
return vv [ i ] . total ( ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
if ( i < 0 )
return sz . height ;
CV_Assert ( i < sz . height ) ;
return vv [ i ] . total ( ) ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
@ -1908,7 +1977,7 @@ int _InputArray::type(int i) const
if ( k = = EXPR )
if ( k = = EXPR )
return ( ( const MatExpr * ) obj ) - > type ( ) ;
return ( ( const MatExpr * ) obj ) - > type ( ) ;
if ( k = = MATX | | k = = STD_VECTOR | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
if ( k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | | k = = STD_ VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
return CV_MAT_TYPE ( flags ) ;
return CV_MAT_TYPE ( flags ) ;
if ( k = = NONE )
if ( k = = NONE )
@ -1938,6 +2007,18 @@ int _InputArray::type(int i) const
return vv [ i > = 0 ? i : 0 ] . type ( ) ;
return vv [ i > = 0 ? i : 0 ] . type ( ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
if ( sz . height = = 0 )
{
CV_Assert ( ( flags & FIXED_TYPE ) ! = 0 ) ;
return CV_MAT_TYPE ( flags ) ;
}
CV_Assert ( i < sz . height ) ;
return vv [ i > = 0 ? i : 0 ] . type ( ) ;
}
if ( k = = STD_VECTOR_CUDA_GPU_MAT )
if ( k = = STD_VECTOR_CUDA_GPU_MAT )
{
{
const std : : vector < cuda : : GpuMat > & vv = * ( const std : : vector < cuda : : GpuMat > * ) obj ;
const std : : vector < cuda : : GpuMat > & vv = * ( const std : : vector < cuda : : GpuMat > * ) obj ;
@ -1986,7 +2067,7 @@ bool _InputArray::empty() const
if ( k = = EXPR )
if ( k = = EXPR )
return false ;
return false ;
if ( k = = MATX )
if ( k = = MATX | | k = = STD_ARRAY )
return false ;
return false ;
if ( k = = STD_VECTOR )
if ( k = = STD_VECTOR )
@ -2016,6 +2097,11 @@ bool _InputArray::empty() const
return vv . empty ( ) ;
return vv . empty ( ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
return sz . height = = 0 ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -2051,7 +2137,7 @@ bool _InputArray::isContinuous(int i) const
if ( k = = UMAT )
if ( k = = UMAT )
return i < 0 ? ( ( const UMat * ) obj ) - > isContinuous ( ) : true ;
return i < 0 ? ( ( const UMat * ) obj ) - > isContinuous ( ) : true ;
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | |
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | |
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
return true ;
return true ;
@ -2062,6 +2148,13 @@ bool _InputArray::isContinuous(int i) const
return vv [ i ] . isContinuous ( ) ;
return vv [ i ] . isContinuous ( ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
CV_Assert ( i < sz . height ) ;
return vv [ i ] . isContinuous ( ) ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -2086,7 +2179,7 @@ bool _InputArray::isSubmatrix(int i) const
if ( k = = UMAT )
if ( k = = UMAT )
return i < 0 ? ( ( const UMat * ) obj ) - > isSubmatrix ( ) : false ;
return i < 0 ? ( ( const UMat * ) obj ) - > isSubmatrix ( ) : false ;
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | |
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | |
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
return false ;
return false ;
@ -2097,6 +2190,13 @@ bool _InputArray::isSubmatrix(int i) const
return vv [ i ] . isSubmatrix ( ) ;
return vv [ i ] . isSubmatrix ( ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
CV_Assert ( i < sz . height ) ;
return vv [ i ] . isSubmatrix ( ) ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -2125,7 +2225,7 @@ size_t _InputArray::offset(int i) const
return ( ( const UMat * ) obj ) - > offset ;
return ( ( const UMat * ) obj ) - > offset ;
}
}
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | |
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | |
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
return 0 ;
return 0 ;
@ -2139,6 +2239,15 @@ size_t _InputArray::offset(int i) const
return ( size_t ) ( vv [ i ] . ptr ( ) - vv [ i ] . datastart ) ;
return ( size_t ) ( vv [ i ] . ptr ( ) - vv [ i ] . datastart ) ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
if ( i < 0 )
return 1 ;
CV_Assert ( i < sz . height ) ;
return ( size_t ) ( vv [ i ] . ptr ( ) - vv [ i ] . datastart ) ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -2180,7 +2289,7 @@ size_t _InputArray::step(int i) const
return ( ( const UMat * ) obj ) - > step ;
return ( ( const UMat * ) obj ) - > step ;
}
}
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | |
if ( k = = EXPR | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | |
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
k = = NONE | | k = = STD_VECTOR_VECTOR | | k = = STD_BOOL_VECTOR )
return 0 ;
return 0 ;
@ -2193,6 +2302,15 @@ size_t _InputArray::step(int i) const
return vv [ i ] . step ;
return vv [ i ] . step ;
}
}
if ( k = = STD_ARRAY_MAT )
{
const Mat * vv = ( const Mat * ) obj ;
if ( i < 0 )
return 1 ;
CV_Assert ( i < sz . height ) ;
return vv [ i ] . step ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
const std : : vector < UMat > & vv = * ( const std : : vector < UMat > * ) obj ;
@ -2222,7 +2340,7 @@ void _InputArray::copyTo(const _OutputArray& arr) const
if ( k = = NONE )
if ( k = = NONE )
arr . release ( ) ;
arr . release ( ) ;
else if ( k = = MAT | | k = = MATX | | k = = STD_VECTOR | | k = = STD_BOOL_VECTOR )
else if ( k = = MAT | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | | k = = STD_ BOOL_VECTOR )
{
{
Mat m = getMat ( ) ;
Mat m = getMat ( ) ;
m . copyTo ( arr ) ;
m . copyTo ( arr ) ;
@ -2247,7 +2365,7 @@ void _InputArray::copyTo(const _OutputArray& arr, const _InputArray & mask) cons
if ( k = = NONE )
if ( k = = NONE )
arr . release ( ) ;
arr . release ( ) ;
else if ( k = = MAT | | k = = MATX | | k = = STD_VECTOR | | k = = STD_BOOL_VECTOR )
else if ( k = = MAT | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY | | k = = STD_ BOOL_VECTOR )
{
{
Mat m = getMat ( ) ;
Mat m = getMat ( ) ;
m . copyTo ( arr , mask ) ;
m . copyTo ( arr , mask ) ;
@ -2436,6 +2554,14 @@ void _OutputArray::create(int d, const int* sizes, int mtype, int i,
return ;
return ;
}
}
if ( k = = STD_ARRAY )
{
int type0 = CV_MAT_TYPE ( flags ) ;
CV_Assert ( mtype = = type0 | | ( CV_MAT_CN ( mtype ) = = 1 & & ( ( 1 < < type0 ) & fixedDepthMask ) ! = 0 ) ) ;
CV_Assert ( d = = 2 & & sz . area ( ) = = sizes [ 0 ] * sizes [ 1 ] ) ;
return ;
}
if ( k = = STD_VECTOR | | k = = STD_VECTOR_VECTOR )
if ( k = = STD_VECTOR | | k = = STD_VECTOR_VECTOR )
{
{
CV_Assert ( d = = 2 & & ( sizes [ 0 ] = = 1 | | sizes [ 1 ] = = 1 | | sizes [ 0 ] * sizes [ 1 ] = = 0 ) ) ;
CV_Assert ( d = = 2 & & ( sizes [ 0 ] = = 1 | | sizes [ 1 ] = = 1 | | sizes [ 0 ] * sizes [ 1 ] = = 0 ) ) ;
@ -2583,6 +2709,65 @@ void _OutputArray::create(int d, const int* sizes, int mtype, int i,
return ;
return ;
}
}
if ( k = = STD_ARRAY_MAT )
{
Mat * v = ( Mat * ) obj ;
if ( i < 0 )
{
CV_Assert ( d = = 2 & & ( sizes [ 0 ] = = 1 | | sizes [ 1 ] = = 1 | | sizes [ 0 ] * sizes [ 1 ] = = 0 ) ) ;
size_t len = sizes [ 0 ] * sizes [ 1 ] > 0 ? sizes [ 0 ] + sizes [ 1 ] - 1 : 0 , len0 = sz . height ;
CV_Assert ( len = = len0 ) ;
if ( fixedType ( ) )
{
int _type = CV_MAT_TYPE ( flags ) ;
for ( size_t j = len0 ; j < len ; j + + )
{
if ( v [ j ] . type ( ) = = _type )
continue ;
CV_Assert ( v [ j ] . empty ( ) ) ;
v [ j ] . flags = ( v [ j ] . flags & ~ CV_MAT_TYPE_MASK ) | _type ;
}
}
return ;
}
CV_Assert ( i < sz . height ) ;
Mat & m = v [ i ] ;
if ( allowTransposed )
{
if ( ! m . isContinuous ( ) )
{
CV_Assert ( ! fixedType ( ) & & ! fixedSize ( ) ) ;
m . release ( ) ;
}
if ( d = = 2 & & m . dims = = 2 & & m . data & &
m . type ( ) = = mtype & & m . rows = = sizes [ 1 ] & & m . cols = = sizes [ 0 ] )
return ;
}
if ( fixedType ( ) )
{
if ( CV_MAT_CN ( mtype ) = = m . channels ( ) & & ( ( 1 < < CV_MAT_TYPE ( flags ) ) & fixedDepthMask ) ! = 0 )
mtype = m . type ( ) ;
else
CV_Assert ( CV_MAT_TYPE ( mtype ) = = m . type ( ) ) ;
}
if ( fixedSize ( ) )
{
CV_Assert ( m . dims = = d ) ;
for ( int j = 0 ; j < d ; + + j )
CV_Assert ( m . size [ j ] = = sizes [ j ] ) ;
}
m . create ( d , sizes , mtype ) ;
return ;
}
if ( k = = STD_VECTOR_UMAT )
if ( k = = STD_VECTOR_UMAT )
{
{
std : : vector < UMat > & v = * ( std : : vector < UMat > * ) obj ;
std : : vector < UMat > & v = * ( std : : vector < UMat > * ) obj ;
@ -2748,13 +2933,21 @@ Mat& _OutputArray::getMatRef(int i) const
CV_Assert ( k = = MAT ) ;
CV_Assert ( k = = MAT ) ;
return * ( Mat * ) obj ;
return * ( Mat * ) obj ;
}
}
else
CV_Assert ( k = = STD_VECTOR_MAT | | k = = STD_ARRAY_MAT ) ;
if ( k = = STD_VECTOR_MAT )
{
{
CV_Assert ( k = = STD_VECTOR_MAT ) ;
std : : vector < Mat > & v = * ( std : : vector < Mat > * ) obj ;
std : : vector < Mat > & v = * ( std : : vector < Mat > * ) obj ;
CV_Assert ( i < ( int ) v . size ( ) ) ;
CV_Assert ( i < ( int ) v . size ( ) ) ;
return v [ i ] ;
return v [ i ] ;
}
}
else
{
Mat * v = ( Mat * ) obj ;
CV_Assert ( 0 < = i & & i < sz . height ) ;
return v [ i ] ;
}
}
}
UMat & _OutputArray : : getUMatRef ( int i ) const
UMat & _OutputArray : : getUMatRef ( int i ) const
@ -2807,7 +3000,7 @@ void _OutputArray::setTo(const _InputArray& arr, const _InputArray & mask) const
if ( k = = NONE )
if ( k = = NONE )
;
;
else if ( k = = MAT | | k = = MATX | | k = = STD_VECTOR )
else if ( k = = MAT | | k = = MATX | | k = = STD_VECTOR | | k = = STD_ARRAY )
{
{
Mat m = getMat ( ) ;
Mat m = getMat ( ) ;
m . setTo ( arr , mask ) ;
m . setTo ( arr , mask ) ;