1
/*M///////////////////////////////////////////////////////////////////////////////////////
3
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
5
// By downloading, copying, installing or using the software you agree to this license.
6
// If you do not agree to this license, do not download, install,
7
// copy or use the software.
11
// For Open Source Computer Vision Library
13
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
16
// Third party copyrights are property of their respective owners.
18
// Redistribution and use in source and binary forms, with or without modification,
19
// are permitted provided that the following conditions are met:
21
// * Redistribution's of source code must retain the above copyright notice,
22
// this list of conditions and the following disclaimer.
24
// * Redistribution's in binary form must reproduce the above copyright notice,
25
// this list of conditions and the following disclaimer in the documentation
26
// and/or other materials provided with the distribution.
28
// * The name of the copyright holders may not be used to endorse or promote products
29
// derived from this software without specific prior written permission.
31
// This software is provided by the copyright holders and contributors "as is" and
32
// any express or implied warranties, including, but not limited to, the implied
33
// warranties of merchantability and fitness for a particular purpose are disclaimed.
34
// In no event shall the Intel Corporation or contributors be liable for any direct,
35
// indirect, incidental, special, exemplary, or consequential damages
36
// (including, but not limited to, procurement of substitute goods or services;
37
// loss of use, data, or profits; or business interruption) however caused
38
// and on any theory of liability, whether in contract, strict liability,
39
// or tort (including negligence or otherwise) arising in any way out of
40
// the use of this software, even if advised of the possibility of such damage.
46
#ifndef __OPENCV_CUDEV_GRID_SPLIT_MERGE_HPP__
47
#define __OPENCV_CUDEV_GRID_SPLIT_MERGE_HPP__
49
#include "../common.hpp"
50
#include "../util/tuple.hpp"
51
#include "../util/vec_traits.hpp"
52
#include "../ptr2d/traits.hpp"
53
#include "../ptr2d/gpumat.hpp"
54
#include "../ptr2d/glob.hpp"
55
#include "../ptr2d/mask.hpp"
56
#include "detail/split_merge.hpp"
58
namespace cv { namespace cudev {
63
template <class Policy, class SrcPtrTuple, typename DstType, class MaskPtr>
64
__host__ void gridMerge_(const SrcPtrTuple& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
66
CV_StaticAssert( VecTraits<DstType>::cn == tuple_size<SrcPtrTuple>::value, "" );
68
const int rows = getRows(src);
69
const int cols = getCols(src);
71
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
73
dst.create(rows, cols);
75
grid_split_merge_detail::MergeImpl<VecTraits<DstType>::cn, Policy>::merge(shrinkPtr(src),
79
StreamAccessor::getStream(stream));
82
template <class Policy, class SrcPtrTuple, typename DstType, class MaskPtr>
83
__host__ void gridMerge_(const SrcPtrTuple& src, const GlobPtrSz<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
85
CV_StaticAssert( VecTraits<DstType>::cn == tuple_size<SrcPtrTuple>::value, "" );
87
const int rows = getRows(src);
88
const int cols = getCols(src);
90
CV_Assert( getRows(dst) == rows && getCols(dst) == cols );
91
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
93
grid_split_merge_detail::MergeImpl<VecTraits<DstType>::cn, Policy>::merge(shrinkPtr(src),
97
StreamAccessor::getStream(stream));
100
template <class Policy, class SrcPtrTuple, typename DstType>
101
__host__ void gridMerge_(const SrcPtrTuple& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
103
CV_StaticAssert( VecTraits<DstType>::cn == tuple_size<SrcPtrTuple>::value, "" );
105
const int rows = getRows(src);
106
const int cols = getCols(src);
108
dst.create(rows, cols);
110
grid_split_merge_detail::MergeImpl<VecTraits<DstType>::cn, Policy>::merge(shrinkPtr(src),
114
StreamAccessor::getStream(stream));
117
template <class Policy, class SrcPtrTuple, typename DstType>
118
__host__ void gridMerge_(const SrcPtrTuple& src, const GlobPtrSz<DstType>& dst, Stream& stream = Stream::Null())
120
CV_StaticAssert( VecTraits<DstType>::cn == tuple_size<SrcPtrTuple>::value, "" );
122
const int rows = getRows(src);
123
const int cols = getCols(src);
125
CV_Assert( getRows(dst) == rows && getCols(dst) == cols );
127
grid_split_merge_detail::MergeImpl<VecTraits<DstType>::cn, Policy>::merge(shrinkPtr(src),
131
StreamAccessor::getStream(stream));
134
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
135
__host__ void gridSplit_(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
137
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 2, "" );
139
const int rows = getRows(src);
140
const int cols = getCols(src);
142
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
144
get<0>(dst).create(rows, cols);
145
get<1>(dst).create(rows, cols);
147
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
148
shrinkPtr(get<0>(dst)), shrinkPtr(get<1>(dst)),
151
StreamAccessor::getStream(stream));
154
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
155
__host__ void gridSplit_(const SrcPtr& src, GpuMat_<DstType> (&dst)[2], const MaskPtr& mask, Stream& stream = Stream::Null())
157
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 2, "" );
159
const int rows = getRows(src);
160
const int cols = getCols(src);
162
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
164
dst[0].create(rows, cols);
165
dst[1].create(rows, cols);
167
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
168
shrinkPtr(dst[0]), shrinkPtr(dst[1]),
171
StreamAccessor::getStream(stream));
174
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
175
__host__ void gridSplit_(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[2], const MaskPtr& mask, Stream& stream = Stream::Null())
177
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 2, "" );
179
const int rows = getRows(src);
180
const int cols = getCols(src);
182
CV_Assert( getRows(dst[0]) == rows && getCols(dst[0]) == cols );
183
CV_Assert( getRows(dst[1]) == rows && getCols(dst[1]) == cols );
184
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
186
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
187
shrinkPtr(dst[0]), shrinkPtr(dst[1]),
190
StreamAccessor::getStream(stream));
193
template <class Policy, class SrcPtr, typename DstType>
194
__host__ void gridSplit_(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, Stream& stream = Stream::Null())
196
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 2, "" );
198
const int rows = getRows(src);
199
const int cols = getCols(src);
201
get<0>(dst).create(rows, cols);
202
get<1>(dst).create(rows, cols);
204
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
205
shrinkPtr(get<0>(dst)), shrinkPtr(get<1>(dst)),
208
StreamAccessor::getStream(stream));
211
template <class Policy, class SrcPtr, typename DstType>
212
__host__ void gridSplit_(const SrcPtr& src, GpuMat_<DstType> (&dst)[2], Stream& stream = Stream::Null())
214
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 2, "" );
216
const int rows = getRows(src);
217
const int cols = getCols(src);
219
dst[0].create(rows, cols);
220
dst[1].create(rows, cols);
222
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
223
shrinkPtr(dst[0]), shrinkPtr(dst[1]),
226
StreamAccessor::getStream(stream));
229
template <class Policy, class SrcPtr, typename DstType>
230
__host__ void gridSplit_(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[2], Stream& stream = Stream::Null())
232
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 2, "" );
234
const int rows = getRows(src);
235
const int cols = getCols(src);
237
CV_Assert( getRows(dst[0]) == rows && getCols(dst[0]) == cols );
238
CV_Assert( getRows(dst[1]) == rows && getCols(dst[1]) == cols );
240
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
241
shrinkPtr(dst[0]), shrinkPtr(dst[1]),
244
StreamAccessor::getStream(stream));
247
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
248
__host__ void gridSplit_(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
250
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 3, "" );
252
const int rows = getRows(src);
253
const int cols = getCols(src);
255
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
257
get<0>(dst).create(rows, cols);
258
get<1>(dst).create(rows, cols);
259
get<2>(dst).create(rows, cols);
261
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
262
shrinkPtr(get<0>(dst)), shrinkPtr(get<1>(dst)), shrinkPtr(get<2>(dst)),
265
StreamAccessor::getStream(stream));
268
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
269
__host__ void gridSplit_(const SrcPtr& src, GpuMat_<DstType> (&dst)[3], const MaskPtr& mask, Stream& stream = Stream::Null())
271
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 3, "" );
273
const int rows = getRows(src);
274
const int cols = getCols(src);
276
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
278
dst[0].create(rows, cols);
279
dst[1].create(rows, cols);
280
dst[2].create(rows, cols);
282
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
283
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]),
286
StreamAccessor::getStream(stream));
289
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
290
__host__ void gridSplit_(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[3], const MaskPtr& mask, Stream& stream = Stream::Null())
292
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 3, "" );
294
const int rows = getRows(src);
295
const int cols = getCols(src);
297
CV_Assert( getRows(dst[0]) == rows && getCols(dst[0]) == cols );
298
CV_Assert( getRows(dst[1]) == rows && getCols(dst[1]) == cols );
299
CV_Assert( getRows(dst[2]) == rows && getCols(dst[2]) == cols );
300
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
302
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
303
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]),
306
StreamAccessor::getStream(stream));
309
template <class Policy, class SrcPtr, typename DstType>
310
__host__ void gridSplit_(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, Stream& stream = Stream::Null())
312
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 3, "" );
314
const int rows = getRows(src);
315
const int cols = getCols(src);
317
get<0>(dst).create(rows, cols);
318
get<1>(dst).create(rows, cols);
319
get<2>(dst).create(rows, cols);
321
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
322
shrinkPtr(get<0>(dst)), shrinkPtr(get<1>(dst)), shrinkPtr(get<2>(dst)),
325
StreamAccessor::getStream(stream));
328
template <class Policy, class SrcPtr, typename DstType>
329
__host__ void gridSplit_(const SrcPtr& src, GpuMat_<DstType> (&dst)[3], Stream& stream = Stream::Null())
331
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 3, "" );
333
const int rows = getRows(src);
334
const int cols = getCols(src);
336
dst[0].create(rows, cols);
337
dst[1].create(rows, cols);
338
dst[2].create(rows, cols);
340
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
341
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]),
344
StreamAccessor::getStream(stream));
347
template <class Policy, class SrcPtr, typename DstType>
348
__host__ void gridSplit_(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[3], Stream& stream = Stream::Null())
350
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 3, "" );
352
const int rows = getRows(src);
353
const int cols = getCols(src);
355
CV_Assert( getRows(dst[0]) == rows && getCols(dst[0]) == cols );
356
CV_Assert( getRows(dst[1]) == rows && getCols(dst[1]) == cols );
357
CV_Assert( getRows(dst[2]) == rows && getCols(dst[2]) == cols );
359
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
360
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]),
363
StreamAccessor::getStream(stream));
366
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
367
__host__ void gridSplit_(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
369
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 4, "" );
371
const int rows = getRows(src);
372
const int cols = getCols(src);
374
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
376
get<0>(dst).create(rows, cols);
377
get<1>(dst).create(rows, cols);
378
get<2>(dst).create(rows, cols);
379
get<3>(dst).create(rows, cols);
381
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
382
shrinkPtr(get<0>(dst)), shrinkPtr(get<1>(dst)), shrinkPtr(get<2>(dst)), shrinkPtr(get<3>(dst)),
385
StreamAccessor::getStream(stream));
388
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
389
__host__ void gridSplit_(const SrcPtr& src, GpuMat_<DstType> (&dst)[4], const MaskPtr& mask, Stream& stream = Stream::Null())
391
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 4, "" );
393
const int rows = getRows(src);
394
const int cols = getCols(src);
396
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
398
dst[0].create(rows, cols);
399
dst[1].create(rows, cols);
400
dst[2].create(rows, cols);
401
dst[3].create(rows, cols);
403
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
404
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]), shrinkPtr(dst[3]),
407
StreamAccessor::getStream(stream));
410
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
411
__host__ void gridSplit_(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[4], const MaskPtr& mask, Stream& stream = Stream::Null())
413
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 4, "" );
415
const int rows = getRows(src);
416
const int cols = getCols(src);
418
CV_Assert( getRows(dst[0]) == rows && getCols(dst[0]) == cols );
419
CV_Assert( getRows(dst[1]) == rows && getCols(dst[1]) == cols );
420
CV_Assert( getRows(dst[2]) == rows && getCols(dst[2]) == cols );
421
CV_Assert( getRows(dst[3]) == rows && getCols(dst[3]) == cols );
422
CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
424
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
425
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]), shrinkPtr(dst[3]),
428
StreamAccessor::getStream(stream));
431
template <class Policy, class SrcPtr, typename DstType>
432
__host__ void gridSplit_(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, Stream& stream = Stream::Null())
434
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 4, "" );
436
const int rows = getRows(src);
437
const int cols = getCols(src);
439
get<0>(dst).create(rows, cols);
440
get<1>(dst).create(rows, cols);
441
get<2>(dst).create(rows, cols);
442
get<3>(dst).create(rows, cols);
444
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
445
shrinkPtr(get<0>(dst)), shrinkPtr(get<1>(dst)), shrinkPtr(get<2>(dst)), shrinkPtr(get<3>(dst)),
448
StreamAccessor::getStream(stream));
451
template <class Policy, class SrcPtr, typename DstType>
452
__host__ void gridSplit_(const SrcPtr& src, GpuMat_<DstType> (&dst)[4], Stream& stream = Stream::Null())
454
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 4, "" );
456
const int rows = getRows(src);
457
const int cols = getCols(src);
459
dst[0].create(rows, cols);
460
dst[1].create(rows, cols);
461
dst[2].create(rows, cols);
462
dst[3].create(rows, cols);
464
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
465
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]), shrinkPtr(dst[3]),
468
StreamAccessor::getStream(stream));
471
template <class Policy, class SrcPtr, typename DstType>
472
__host__ void gridSplit_(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[4], Stream& stream = Stream::Null())
474
CV_StaticAssert( VecTraits<typename PtrTraits<SrcPtr>::value_type>::cn == 4, "" );
476
const int rows = getRows(src);
477
const int cols = getCols(src);
479
CV_Assert( getRows(dst[0]) == rows && getCols(dst[0]) == cols );
480
CV_Assert( getRows(dst[1]) == rows && getCols(dst[1]) == cols );
481
CV_Assert( getRows(dst[2]) == rows && getCols(dst[2]) == cols );
482
CV_Assert( getRows(dst[3]) == rows && getCols(dst[3]) == cols );
484
grid_split_merge_detail::split<Policy>(shrinkPtr(src),
485
shrinkPtr(dst[0]), shrinkPtr(dst[1]), shrinkPtr(dst[2]), shrinkPtr(dst[3]),
488
StreamAccessor::getStream(stream));
493
struct DefaultSplitMergePolicy
501
template <class SrcPtrTuple, typename DstType, class MaskPtr>
502
__host__ void gridMerge(const SrcPtrTuple& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
504
gridMerge_<DefaultSplitMergePolicy>(src, dst, mask, stream);
507
template <class SrcPtrTuple, typename DstType, class MaskPtr>
508
__host__ void gridMerge(const SrcPtrTuple& src, const GlobPtrSz<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
510
gridMerge_<DefaultSplitMergePolicy>(src, dst, mask, stream);
513
template <class SrcPtrTuple, typename DstType>
514
__host__ void gridMerge(const SrcPtrTuple& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
516
gridMerge_<DefaultSplitMergePolicy>(src, dst, stream);
519
template <class SrcPtrTuple, typename DstType>
520
__host__ void gridMerge(const SrcPtrTuple& src, const GlobPtrSz<DstType>& dst, Stream& stream = Stream::Null())
522
gridMerge_<DefaultSplitMergePolicy>(src, dst, stream);
525
template <class SrcPtr, typename DstType, class MaskPtr>
526
__host__ void gridSplit(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
528
gridSplit_<DefaultSplitMergePolicy>(src, dst, mask, stream);
531
template <class SrcPtr, typename DstType>
532
__host__ void gridSplit(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, Stream& stream = Stream::Null())
534
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
537
template <class SrcPtr, typename DstType, class MaskPtr>
538
__host__ void gridSplit(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
540
gridSplit_<DefaultSplitMergePolicy>(src, dst, mask, stream);
543
template <class SrcPtr, typename DstType>
544
__host__ void gridSplit(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, Stream& stream = Stream::Null())
546
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
549
template <class SrcPtr, typename DstType, class MaskPtr>
550
__host__ void gridSplit(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
552
gridSplit_<DefaultSplitMergePolicy>(src, dst, mask, stream);
555
template <class SrcPtr, typename DstType>
556
__host__ void gridSplit(const SrcPtr& src, const tuple< GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>&, GpuMat_<DstType>& >& dst, Stream& stream = Stream::Null())
558
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
561
template <class SrcPtr, typename DstType, int COUNT, class MaskPtr>
562
__host__ void gridSplit(const SrcPtr& src, GpuMat_<DstType> (&dst)[COUNT], const MaskPtr& mask, Stream& stream = Stream::Null())
564
gridSplit_<DefaultSplitMergePolicy>(src, dst, mask, stream);
567
template <class SrcPtr, typename DstType, int COUNT, class MaskPtr>
568
__host__ void gridSplit(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[COUNT], const MaskPtr& mask, Stream& stream = Stream::Null())
570
gridSplit_<DefaultSplitMergePolicy>(src, dst, mask, stream);
573
template <class SrcPtr, typename DstType, int COUNT>
574
__host__ void gridSplit(const SrcPtr& src, GpuMat_<DstType> (&dst)[COUNT], Stream& stream = Stream::Null())
576
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
579
template <class SrcPtr, typename DstType, int COUNT>
580
__host__ void gridSplit(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[COUNT], Stream& stream = Stream::Null())
582
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);