@@ -77,6 +77,16 @@ template<typename _Tp> inline
77
77
_InputArray::_InputArray (const std::vector<_Tp>& vec)
78
78
{ init (FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type + ACCESS_READ, &vec); }
79
79
80
+ #ifdef CV_CXX_STD_ARRAY
81
+ template <typename _Tp, std::size_t _N> inline
82
+ _InputArray::_InputArray (const std::array<_Tp, _N>& arr)
83
+ { init (FIXED_TYPE + FIXED_SIZE + STD_ARRAY + DataType<_Tp>::type + ACCESS_READ, arr.data (), Size (1 , _N)); }
84
+
85
+ template <std::size_t _N> inline
86
+ _InputArray::_InputArray (const std::array<Mat, _N>& arr)
87
+ { init (STD_ARRAY_MAT + ACCESS_READ, arr.data (), Size (1 , _N)); }
88
+ #endif
89
+
80
90
inline
81
91
_InputArray::_InputArray (const std::vector<bool >& vec)
82
92
{ init (FIXED_TYPE + STD_BOOL_VECTOR + DataType<bool >::type + ACCESS_READ, &vec); }
@@ -133,7 +143,9 @@ inline bool _InputArray::isUMat() const { return kind() == _InputArray::UMAT; }
133
143
inline bool _InputArray::isMatVector () const { return kind () == _InputArray::STD_VECTOR_MAT; }
134
144
inline bool _InputArray::isUMatVector () const { return kind () == _InputArray::STD_VECTOR_UMAT; }
135
145
inline bool _InputArray::isMatx () const { return kind () == _InputArray::MATX; }
136
- inline bool _InputArray::isVector () const { return kind () == _InputArray::STD_VECTOR || kind () == _InputArray::STD_BOOL_VECTOR; }
146
+ inline bool _InputArray::isVector () const { return kind () == _InputArray::STD_VECTOR ||
147
+ kind () == _InputArray::STD_BOOL_VECTOR ||
148
+ kind () == _InputArray::STD_ARRAY; }
137
149
inline bool _InputArray::isGpuMatVector () const { return kind () == _InputArray::STD_VECTOR_CUDA_GPU_MAT; }
138
150
139
151
// //////////////////////////////////////////////////////////////////////////////////////
@@ -149,6 +161,16 @@ template<typename _Tp> inline
149
161
_OutputArray::_OutputArray (std::vector<_Tp>& vec)
150
162
{ init (FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }
151
163
164
+ #ifdef CV_CXX_STD_ARRAY
165
+ template <typename _Tp, std::size_t _N> inline
166
+ _OutputArray::_OutputArray (std::array<_Tp, _N>& arr)
167
+ { init (FIXED_TYPE + FIXED_SIZE + STD_ARRAY + DataType<_Tp>::type + ACCESS_WRITE, arr.data (), Size (1 , _N)); }
168
+
169
+ template <std::size_t _N> inline
170
+ _OutputArray::_OutputArray (std::array<Mat, _N>& arr)
171
+ { init (STD_ARRAY_MAT + ACCESS_WRITE, arr.data (), Size (1 , _N)); }
172
+ #endif
173
+
152
174
inline
153
175
_OutputArray::_OutputArray (std::vector<bool >&)
154
176
{ CV_Error (Error::StsUnsupportedFormat, " std::vector<bool> cannot be an output array\n " ); }
@@ -177,6 +199,16 @@ template<typename _Tp> inline
177
199
_OutputArray::_OutputArray (const std::vector<_Tp>& vec)
178
200
{ init (FIXED_TYPE + FIXED_SIZE + STD_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }
179
201
202
+ #ifdef CV_CXX_STD_ARRAY
203
+ template <typename _Tp, std::size_t _N> inline
204
+ _OutputArray::_OutputArray (const std::array<_Tp, _N>& arr)
205
+ { init (FIXED_TYPE + FIXED_SIZE + STD_ARRAY + DataType<_Tp>::type + ACCESS_WRITE, arr.data (), Size (1 , _N)); }
206
+
207
+ template <std::size_t _N> inline
208
+ _OutputArray::_OutputArray (const std::array<Mat, _N>& arr)
209
+ { init (FIXED_SIZE + STD_ARRAY_MAT + ACCESS_WRITE, arr.data (), Size (1 , _N)); }
210
+ #endif
211
+
180
212
template <typename _Tp> inline
181
213
_OutputArray::_OutputArray (const std::vector<std::vector<_Tp> >& vec)
182
214
{ init (FIXED_TYPE + FIXED_SIZE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_WRITE, &vec); }
@@ -244,6 +276,16 @@ template<typename _Tp> inline
244
276
_InputOutputArray::_InputOutputArray (std::vector<_Tp>& vec)
245
277
{ init (FIXED_TYPE + STD_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }
246
278
279
+ #ifdef CV_CXX_STD_ARRAY
280
+ template <typename _Tp, std::size_t _N> inline
281
+ _InputOutputArray::_InputOutputArray (std::array<_Tp, _N>& arr)
282
+ { init (FIXED_TYPE + FIXED_SIZE + STD_ARRAY + DataType<_Tp>::type + ACCESS_RW, arr.data (), Size (1 , _N)); }
283
+
284
+ template <std::size_t _N> inline
285
+ _InputOutputArray::_InputOutputArray (std::array<Mat, _N>& arr)
286
+ { init (STD_ARRAY_MAT + ACCESS_RW, arr.data (), Size (1 , _N)); }
287
+ #endif
288
+
247
289
inline _InputOutputArray::_InputOutputArray (std::vector<bool >&)
248
290
{ CV_Error (Error::StsUnsupportedFormat, " std::vector<bool> cannot be an input/output array\n " ); }
249
291
@@ -271,6 +313,16 @@ template<typename _Tp> inline
271
313
_InputOutputArray::_InputOutputArray (const std::vector<_Tp>& vec)
272
314
{ init (FIXED_TYPE + FIXED_SIZE + STD_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }
273
315
316
+ #ifdef CV_CXX_STD_ARRAY
317
+ template <typename _Tp, std::size_t _N> inline
318
+ _InputOutputArray::_InputOutputArray (const std::array<_Tp, _N>& arr)
319
+ { init (FIXED_TYPE + FIXED_SIZE + STD_ARRAY + DataType<_Tp>::type + ACCESS_RW, arr.data (), Size (1 , _N)); }
320
+
321
+ template <std::size_t _N> inline
322
+ _InputOutputArray::_InputOutputArray (const std::array<Mat, _N>& arr)
323
+ { init (FIXED_SIZE + STD_ARRAY_MAT + ACCESS_RW, arr.data (), Size (1 , _N)); }
324
+ #endif
325
+
274
326
template <typename _Tp> inline
275
327
_InputOutputArray::_InputOutputArray (const std::vector<std::vector<_Tp> >& vec)
276
328
{ init (FIXED_TYPE + FIXED_SIZE + STD_VECTOR_VECTOR + DataType<_Tp>::type + ACCESS_RW, &vec); }
@@ -505,6 +557,25 @@ Mat::Mat(const std::vector<_Tp>& vec, bool copyData)
505
557
Mat ((int )vec.size (), 1 , DataType<_Tp>::type, (uchar*)&vec[0 ]).copyTo (*this );
506
558
}
507
559
560
+ #ifdef CV_CXX_STD_ARRAY
561
+ template <typename _Tp, std::size_t _N> inline
562
+ Mat::Mat (const std::array<_Tp, _N>& arr, bool copyData)
563
+ : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2 ), rows((int )arr.size()),
564
+ cols(1 ), data(0 ), datastart(0 ), dataend(0 ), allocator(0 ), u(0 ), size(&rows)
565
+ {
566
+ if (arr.empty ())
567
+ return ;
568
+ if ( !copyData )
569
+ {
570
+ step[0 ] = step[1 ] = sizeof (_Tp);
571
+ datastart = data = (uchar*)arr.data ();
572
+ datalimit = dataend = datastart + rows * step[0 ];
573
+ }
574
+ else
575
+ Mat ((int )arr.size (), 1 , DataType<_Tp>::type, (uchar*)arr.data ()).copyTo (*this );
576
+ }
577
+ #endif
578
+
508
579
template <typename _Tp, int n> inline
509
580
Mat::Mat (const Vec<_Tp, n>& vec, bool copyData)
510
581
: flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG), dims(2 ), rows(n), cols(1 ), data(0 ),
@@ -1114,6 +1185,16 @@ Mat::operator std::vector<_Tp>() const
1114
1185
return v;
1115
1186
}
1116
1187
1188
+ #ifdef CV_CXX_STD_ARRAY
1189
+ template <typename _Tp, std::size_t _N> inline
1190
+ Mat::operator std::array<_Tp, _N>() const
1191
+ {
1192
+ std::array<_Tp, _N> v;
1193
+ copyTo (v);
1194
+ return v;
1195
+ }
1196
+ #endif
1197
+
1117
1198
template <typename _Tp, int n> inline
1118
1199
Mat::operator Vec<_Tp, n>() const
1119
1200
{
@@ -1468,6 +1549,13 @@ Mat_<_Tp>::Mat_(const std::vector<_Tp>& vec, bool copyData)
1468
1549
: Mat(vec, copyData)
1469
1550
{}
1470
1551
1552
+ #ifdef CV_CXX_STD_ARRAY
1553
+ template <typename _Tp> template <std::size_t _N> inline
1554
+ Mat_<_Tp>::Mat_(const std::array<_Tp, _N>& arr, bool copyData)
1555
+ : Mat(arr, copyData)
1556
+ {}
1557
+ #endif
1558
+
1471
1559
template <typename _Tp> inline
1472
1560
Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat& m)
1473
1561
{
@@ -1745,6 +1833,16 @@ Mat_<_Tp>::operator std::vector<_Tp>() const
1745
1833
return v;
1746
1834
}
1747
1835
1836
+ #ifdef CV_CXX_STD_ARRAY
1837
+ template <typename _Tp> template <std::size_t _N> inline
1838
+ Mat_<_Tp>::operator std::array<_Tp, _N>() const
1839
+ {
1840
+ std::array<_Tp, _N> a;
1841
+ copyTo (a);
1842
+ return a;
1843
+ }
1844
+ #endif
1845
+
1748
1846
template <typename _Tp> template <int n> inline
1749
1847
Mat_<_Tp>::operator Vec<typename DataType<_Tp>::channel_type, n>() const
1750
1848
{
@@ -3426,7 +3524,6 @@ cols(1), allocator(0), usageFlags(USAGE_DEFAULT), u(0), offset(0), size(&rows)
3426
3524
Mat ((int )vec.size (), 1 , DataType<_Tp>::type, (uchar*)&vec[0 ]).copyTo (*this );
3427
3525
}
3428
3526
3429
-
3430
3527
inline
3431
3528
UMat& UMat::operator = (const UMat& m)
3432
3529
{
0 commit comments