1 /*M///////////////////////////////////////////////////////////////////////////////////////
2 //
3 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4 //
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.
8 //
9 //
10 // License Agreement
11 // For Open Source Computer Vision Library
12 //
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15 // Third party copyrights are property of their respective owners.
16 //
17 // Redistribution and use in source and binary forms, with or without modification,
18 // are permitted provided that the following conditions are met:
19 //
20 // * Redistribution's of source code must retain the above copyright notice,
21 // this list of conditions and the following disclaimer.
22 //
23 // * Redistribution's in binary form must reproduce the above copyright notice,
24 // this list of conditions and the following disclaimer in the documentation
25 // and/or other materials provided with the distribution.
26 //
27 // * The name of the copyright holders may not be used to endorse or promote products
28 // derived from this software without specific prior written permission.
29 //
30 // This software is provided by the copyright holders and contributors "as is" and
31 // any express or implied warranties, including, but not limited to, the implied
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.
33 // In no event shall the Intel Corporation or contributors be liable for any direct,
34 // indirect, incidental, special, exemplary, or consequential damages
35 // (including, but not limited to, procurement of substitute goods or services;
36 // loss of use, data, or profits; or business interruption) however caused
37 // and on any theory of liability, whether in contract, strict liability,
38 // or tort (including negligence or otherwise) arising in any way out of
39 // the use of this software, even if advised of the possibility of such damage.
40 //
41 //M*/
42
43 #include "precomp.hpp"
44
45 using namespace cv;
46 using namespace cv::cuda;
47
48 #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
49
cvtColor(InputArray,OutputArray,int,int,Stream &)50 void cv::cuda::cvtColor(InputArray, OutputArray, int, int, Stream&) { throw_no_cuda(); }
51
demosaicing(InputArray,OutputArray,int,int,Stream &)52 void cv::cuda::demosaicing(InputArray, OutputArray, int, int, Stream&) { throw_no_cuda(); }
53
swapChannels(InputOutputArray,const int[],Stream &)54 void cv::cuda::swapChannels(InputOutputArray, const int[], Stream&) { throw_no_cuda(); }
55
gammaCorrection(InputArray,OutputArray,bool,Stream &)56 void cv::cuda::gammaCorrection(InputArray, OutputArray, bool, Stream&) { throw_no_cuda(); }
57
alphaComp(InputArray,InputArray,OutputArray,int,Stream &)58 void cv::cuda::alphaComp(InputArray, InputArray, OutputArray, int, Stream&) { throw_no_cuda(); }
59
60
61 #else /* !defined (HAVE_CUDA) */
62
63 #include "cvt_color_internal.h"
64
65 namespace cv { namespace cuda {
66 namespace device
67 {
68 template <int cn>
69 void Bayer2BGR_8u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream);
70 template <int cn>
71 void Bayer2BGR_16u_gpu(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream);
72
73 template <int cn>
74 void MHCdemosaic(PtrStepSzb src, int2 sourceOffset, PtrStepSzb dst, int2 firstRed, cudaStream_t stream);
75 }
76 }}
77
78 using namespace ::cv::cuda::device;
79
80 namespace
81 {
82 typedef void (*gpu_func_t)(const GpuMat& _src, GpuMat& _dst, Stream& stream);
83
BGR_to_RGB(InputArray _src,OutputArray _dst,int,Stream & stream)84 void BGR_to_RGB(InputArray _src, OutputArray _dst, int, Stream& stream)
85 {
86 using namespace cv::cuda::device;
87 static const gpu_func_t funcs[] = {BGR_to_RGB_8u, 0, BGR_to_RGB_16u, 0, 0, BGR_to_RGB_32f};
88
89 GpuMat src = _src.getGpuMat();
90
91 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
92 CV_Assert( src.channels() == 3 );
93
94 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 3));
95 GpuMat dst = _dst.getGpuMat();
96
97 funcs[src.depth()](src, dst, stream);
98 }
99
BGR_to_BGRA(InputArray _src,OutputArray _dst,int,Stream & stream)100 void BGR_to_BGRA(InputArray _src, OutputArray _dst, int, Stream& stream)
101 {
102 using namespace cv::cuda::device;
103 static const gpu_func_t funcs[] = {BGR_to_BGRA_8u, 0, BGR_to_BGRA_16u, 0, 0, BGR_to_BGRA_32f};
104
105 GpuMat src = _src.getGpuMat();
106
107 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
108 CV_Assert( src.channels() == 3 );
109
110 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 4));
111 GpuMat dst = _dst.getGpuMat();
112
113 funcs[src.depth()](src, dst, stream);
114 }
115
BGR_to_RGBA(InputArray _src,OutputArray _dst,int,Stream & stream)116 void BGR_to_RGBA(InputArray _src, OutputArray _dst, int, Stream& stream)
117 {
118 using namespace cv::cuda::device;
119 static const gpu_func_t funcs[] = {BGR_to_RGBA_8u, 0, BGR_to_RGBA_16u, 0, 0, BGR_to_RGBA_32f};
120
121 GpuMat src = _src.getGpuMat();
122
123 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
124 CV_Assert( src.channels() == 3 );
125
126 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 4));
127 GpuMat dst = _dst.getGpuMat();
128
129 funcs[src.depth()](src, dst, stream);
130 }
131
BGRA_to_BGR(InputArray _src,OutputArray _dst,int,Stream & stream)132 void BGRA_to_BGR(InputArray _src, OutputArray _dst, int, Stream& stream)
133 {
134 using namespace cv::cuda::device;
135 static const gpu_func_t funcs[] = {BGRA_to_BGR_8u, 0, BGRA_to_BGR_16u, 0, 0, BGRA_to_BGR_32f};
136
137 GpuMat src = _src.getGpuMat();
138
139 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
140 CV_Assert( src.channels() == 4 );
141
142 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 3));
143 GpuMat dst = _dst.getGpuMat();
144
145 funcs[src.depth()](src, dst, stream);
146 }
147
BGRA_to_RGB(InputArray _src,OutputArray _dst,int,Stream & stream)148 void BGRA_to_RGB(InputArray _src, OutputArray _dst, int, Stream& stream)
149 {
150 using namespace cv::cuda::device;
151 static const gpu_func_t funcs[] = {BGRA_to_RGB_8u, 0, BGRA_to_RGB_16u, 0, 0, BGRA_to_RGB_32f};
152
153 GpuMat src = _src.getGpuMat();
154
155 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
156 CV_Assert( src.channels() == 4 );
157
158 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 3));
159 GpuMat dst = _dst.getGpuMat();
160
161 funcs[src.depth()](src, dst, stream);
162 }
163
BGRA_to_RGBA(InputArray _src,OutputArray _dst,int,Stream & stream)164 void BGRA_to_RGBA(InputArray _src, OutputArray _dst, int, Stream& stream)
165 {
166 using namespace cv::cuda::device;
167 static const gpu_func_t funcs[] = {BGRA_to_RGBA_8u, 0, BGRA_to_RGBA_16u, 0, 0, BGRA_to_RGBA_32f};
168
169 GpuMat src = _src.getGpuMat();
170
171 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
172 CV_Assert( src.channels() == 4 );
173
174 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 4));
175 GpuMat dst = _dst.getGpuMat();
176
177 funcs[src.depth()](src, dst, stream);
178 }
179
BGR_to_BGR555(InputArray _src,OutputArray _dst,int,Stream & stream)180 void BGR_to_BGR555(InputArray _src, OutputArray _dst, int, Stream& stream)
181 {
182 GpuMat src = _src.getGpuMat();
183
184 CV_Assert( src.depth() == CV_8U );
185 CV_Assert( src.channels() == 3 );
186
187 _dst.create(src.size(), CV_8UC2);
188 GpuMat dst = _dst.getGpuMat();
189
190 cv::cuda::device::BGR_to_BGR555(src, dst, stream);
191 }
192
BGR_to_BGR565(InputArray _src,OutputArray _dst,int,Stream & stream)193 void BGR_to_BGR565(InputArray _src, OutputArray _dst, int, Stream& stream)
194 {
195 GpuMat src = _src.getGpuMat();
196
197 CV_Assert( src.depth() == CV_8U );
198 CV_Assert( src.channels() == 3 );
199
200 _dst.create(src.size(), CV_8UC2);
201 GpuMat dst = _dst.getGpuMat();
202
203 cv::cuda::device::BGR_to_BGR565(src, dst, stream);
204 }
205
RGB_to_BGR555(InputArray _src,OutputArray _dst,int,Stream & stream)206 void RGB_to_BGR555(InputArray _src, OutputArray _dst, int, Stream& stream)
207 {
208 GpuMat src = _src.getGpuMat();
209
210 CV_Assert( src.depth() == CV_8U );
211 CV_Assert( src.channels() == 3 );
212
213 _dst.create(src.size(), CV_8UC2);
214 GpuMat dst = _dst.getGpuMat();
215
216 cv::cuda::device::RGB_to_BGR555(src, dst, stream);
217 }
218
RGB_to_BGR565(InputArray _src,OutputArray _dst,int,Stream & stream)219 void RGB_to_BGR565(InputArray _src, OutputArray _dst, int, Stream& stream)
220 {
221 GpuMat src = _src.getGpuMat();
222
223 CV_Assert( src.depth() == CV_8U );
224 CV_Assert( src.channels() == 3 );
225
226 _dst.create(src.size(), CV_8UC2);
227 GpuMat dst = _dst.getGpuMat();
228
229 cv::cuda::device::RGB_to_BGR565(src, dst, stream);
230 }
231
BGRA_to_BGR555(InputArray _src,OutputArray _dst,int,Stream & stream)232 void BGRA_to_BGR555(InputArray _src, OutputArray _dst, int, Stream& stream)
233 {
234 GpuMat src = _src.getGpuMat();
235
236 CV_Assert( src.depth() == CV_8U );
237 CV_Assert( src.channels() == 4 );
238
239 _dst.create(src.size(), CV_8UC2);
240 GpuMat dst = _dst.getGpuMat();
241
242 cv::cuda::device::BGRA_to_BGR555(src, dst, stream);
243 }
244
BGRA_to_BGR565(InputArray _src,OutputArray _dst,int,Stream & stream)245 void BGRA_to_BGR565(InputArray _src, OutputArray _dst, int, Stream& stream)
246 {
247 GpuMat src = _src.getGpuMat();
248
249 CV_Assert( src.depth() == CV_8U );
250 CV_Assert( src.channels() == 4 );
251
252 _dst.create(src.size(), CV_8UC2);
253 GpuMat dst = _dst.getGpuMat();
254
255 cv::cuda::device::BGRA_to_BGR565(src, dst, stream);
256 }
257
RGBA_to_BGR555(InputArray _src,OutputArray _dst,int,Stream & stream)258 void RGBA_to_BGR555(InputArray _src, OutputArray _dst, int, Stream& stream)
259 {
260 GpuMat src = _src.getGpuMat();
261
262 CV_Assert( src.depth() == CV_8U );
263 CV_Assert( src.channels() == 4 );
264
265 _dst.create(src.size(), CV_8UC2);
266 GpuMat dst = _dst.getGpuMat();
267
268 cv::cuda::device::RGBA_to_BGR555(src, dst, stream);
269 }
270
RGBA_to_BGR565(InputArray _src,OutputArray _dst,int,Stream & stream)271 void RGBA_to_BGR565(InputArray _src, OutputArray _dst, int, Stream& stream)
272 {
273 GpuMat src = _src.getGpuMat();
274
275 CV_Assert( src.depth() == CV_8U );
276 CV_Assert( src.channels() == 4 );
277
278 _dst.create(src.size(), CV_8UC2);
279 GpuMat dst = _dst.getGpuMat();
280
281 cv::cuda::device::RGBA_to_BGR565(src, dst, stream);
282 }
283
BGR555_to_RGB(InputArray _src,OutputArray _dst,int,Stream & stream)284 void BGR555_to_RGB(InputArray _src, OutputArray _dst, int, Stream& stream)
285 {
286 GpuMat src = _src.getGpuMat();
287
288 CV_Assert( src.depth() == CV_8U );
289 CV_Assert( src.channels() == 2 );
290
291 _dst.create(src.size(), CV_8UC3);
292 GpuMat dst = _dst.getGpuMat();
293
294 cv::cuda::device::BGR555_to_RGB(src, dst, stream);
295 }
296
BGR565_to_RGB(InputArray _src,OutputArray _dst,int,Stream & stream)297 void BGR565_to_RGB(InputArray _src, OutputArray _dst, int, Stream& stream)
298 {
299 GpuMat src = _src.getGpuMat();
300
301 CV_Assert( src.depth() == CV_8U );
302 CV_Assert( src.channels() == 2 );
303
304 _dst.create(src.size(), CV_8UC3);
305 GpuMat dst = _dst.getGpuMat();
306
307 cv::cuda::device::BGR565_to_RGB(src, dst, stream);
308 }
309
BGR555_to_BGR(InputArray _src,OutputArray _dst,int,Stream & stream)310 void BGR555_to_BGR(InputArray _src, OutputArray _dst, int, Stream& stream)
311 {
312 GpuMat src = _src.getGpuMat();
313
314 CV_Assert( src.depth() == CV_8U );
315 CV_Assert( src.channels() == 2 );
316
317 _dst.create(src.size(), CV_8UC3);
318 GpuMat dst = _dst.getGpuMat();
319
320 cv::cuda::device::BGR555_to_BGR(src, dst, stream);
321 }
322
BGR565_to_BGR(InputArray _src,OutputArray _dst,int,Stream & stream)323 void BGR565_to_BGR(InputArray _src, OutputArray _dst, int, Stream& stream)
324 {
325 GpuMat src = _src.getGpuMat();
326
327 CV_Assert( src.depth() == CV_8U );
328 CV_Assert( src.channels() == 2 );
329
330 _dst.create(src.size(), CV_8UC3);
331 GpuMat dst = _dst.getGpuMat();
332
333 cv::cuda::device::BGR565_to_BGR(src, dst, stream);
334 }
335
BGR555_to_RGBA(InputArray _src,OutputArray _dst,int,Stream & stream)336 void BGR555_to_RGBA(InputArray _src, OutputArray _dst, int, Stream& stream)
337 {
338 GpuMat src = _src.getGpuMat();
339
340 CV_Assert( src.depth() == CV_8U );
341 CV_Assert( src.channels() == 2 );
342
343 _dst.create(src.size(), CV_8UC4);
344 GpuMat dst = _dst.getGpuMat();
345
346 cv::cuda::device::BGR555_to_RGBA(src, dst, stream);
347 }
348
BGR565_to_RGBA(InputArray _src,OutputArray _dst,int,Stream & stream)349 void BGR565_to_RGBA(InputArray _src, OutputArray _dst, int, Stream& stream)
350 {
351 GpuMat src = _src.getGpuMat();
352
353 CV_Assert( src.depth() == CV_8U );
354 CV_Assert( src.channels() == 2 );
355
356 _dst.create(src.size(), CV_8UC4);
357 GpuMat dst = _dst.getGpuMat();
358
359 cv::cuda::device::BGR565_to_RGBA(src, dst, stream);
360 }
361
BGR555_to_BGRA(InputArray _src,OutputArray _dst,int,Stream & stream)362 void BGR555_to_BGRA(InputArray _src, OutputArray _dst, int, Stream& stream)
363 {
364 GpuMat src = _src.getGpuMat();
365
366 CV_Assert( src.depth() == CV_8U );
367 CV_Assert( src.channels() == 2 );
368
369 _dst.create(src.size(), CV_8UC4);
370 GpuMat dst = _dst.getGpuMat();
371
372 cv::cuda::device::BGR555_to_BGRA(src, dst, stream);
373 }
374
BGR565_to_BGRA(InputArray _src,OutputArray _dst,int,Stream & stream)375 void BGR565_to_BGRA(InputArray _src, OutputArray _dst, int, Stream& stream)
376 {
377 GpuMat src = _src.getGpuMat();
378
379 CV_Assert( src.depth() == CV_8U );
380 CV_Assert( src.channels() == 2 );
381
382 _dst.create(src.size(), CV_8UC4);
383 GpuMat dst = _dst.getGpuMat();
384
385 cv::cuda::device::BGR565_to_BGRA(src, dst, stream);
386 }
387
GRAY_to_BGR(InputArray _src,OutputArray _dst,int,Stream & stream)388 void GRAY_to_BGR(InputArray _src, OutputArray _dst, int, Stream& stream)
389 {
390 using namespace cv::cuda::device;
391 static const gpu_func_t funcs[] = {GRAY_to_BGR_8u, 0, GRAY_to_BGR_16u, 0, 0, GRAY_to_BGR_32f};
392
393 GpuMat src = _src.getGpuMat();
394
395 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
396 CV_Assert( src.channels() == 1 );
397
398 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 3));
399 GpuMat dst = _dst.getGpuMat();
400
401 funcs[src.depth()](src, dst, stream);
402 }
403
GRAY_to_BGRA(InputArray _src,OutputArray _dst,int,Stream & stream)404 void GRAY_to_BGRA(InputArray _src, OutputArray _dst, int, Stream& stream)
405 {
406 using namespace cv::cuda::device;
407 static const gpu_func_t funcs[] = {GRAY_to_BGRA_8u, 0, GRAY_to_BGRA_16u, 0, 0, GRAY_to_BGRA_32f};
408
409 GpuMat src = _src.getGpuMat();
410
411 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
412 CV_Assert( src.channels() == 1 );
413
414 _dst.create(src.size(), CV_MAKETYPE(src.depth(), 4));
415 GpuMat dst = _dst.getGpuMat();
416
417 funcs[src.depth()](src, dst, stream);
418 }
419
GRAY_to_BGR555(InputArray _src,OutputArray _dst,int,Stream & stream)420 void GRAY_to_BGR555(InputArray _src, OutputArray _dst, int, Stream& stream)
421 {
422 GpuMat src = _src.getGpuMat();
423
424 CV_Assert( src.depth() == CV_8U );
425 CV_Assert( src.channels() == 1 );
426
427 _dst.create(src.size(), CV_8UC2);
428 GpuMat dst = _dst.getGpuMat();
429
430 cv::cuda::device::GRAY_to_BGR555(src, dst, stream);
431 }
432
GRAY_to_BGR565(InputArray _src,OutputArray _dst,int,Stream & stream)433 void GRAY_to_BGR565(InputArray _src, OutputArray _dst, int, Stream& stream)
434 {
435 GpuMat src = _src.getGpuMat();
436
437 CV_Assert( src.depth() == CV_8U );
438 CV_Assert( src.channels() == 1 );
439
440 _dst.create(src.size(), CV_8UC2);
441 GpuMat dst = _dst.getGpuMat();
442
443 cv::cuda::device::GRAY_to_BGR565(src, dst, stream);
444 }
445
BGR555_to_GRAY(InputArray _src,OutputArray _dst,int,Stream & stream)446 void BGR555_to_GRAY(InputArray _src, OutputArray _dst, int, Stream& stream)
447 {
448 GpuMat src = _src.getGpuMat();
449
450 CV_Assert( src.depth() == CV_8U );
451 CV_Assert( src.channels() == 2 );
452
453 _dst.create(src.size(), CV_8UC1);
454 GpuMat dst = _dst.getGpuMat();
455
456 cv::cuda::device::BGR555_to_GRAY(src, dst, stream);
457 }
458
BGR565_to_GRAY(InputArray _src,OutputArray _dst,int,Stream & stream)459 void BGR565_to_GRAY(InputArray _src, OutputArray _dst, int, Stream& stream)
460 {
461 GpuMat src = _src.getGpuMat();
462
463 CV_Assert( src.depth() == CV_8U );
464 CV_Assert( src.channels() == 2 );
465
466 _dst.create(src.size(), CV_8UC1);
467 GpuMat dst = _dst.getGpuMat();
468
469 cv::cuda::device::BGR565_to_GRAY(src, dst, stream);
470 }
471
RGB_to_GRAY(InputArray _src,OutputArray _dst,int,Stream & stream)472 void RGB_to_GRAY(InputArray _src, OutputArray _dst, int, Stream& stream)
473 {
474 using namespace cv::cuda::device;
475 static const gpu_func_t funcs[] = {RGB_to_GRAY_8u, 0, RGB_to_GRAY_16u, 0, 0, RGB_to_GRAY_32f};
476
477 GpuMat src = _src.getGpuMat();
478
479 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
480 CV_Assert( src.channels() == 3 );
481
482 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 1));
483 GpuMat dst = _dst.getGpuMat();
484
485 funcs[src.depth()](src, dst, stream);
486 }
487
BGR_to_GRAY(InputArray _src,OutputArray _dst,int,Stream & stream)488 void BGR_to_GRAY(InputArray _src, OutputArray _dst, int, Stream& stream)
489 {
490 using namespace cv::cuda::device;
491 static const gpu_func_t funcs[] = {BGR_to_GRAY_8u, 0, BGR_to_GRAY_16u, 0, 0, BGR_to_GRAY_32f};
492
493 GpuMat src = _src.getGpuMat();
494
495 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
496 CV_Assert( src.channels() == 3 );
497
498 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 1));
499 GpuMat dst = _dst.getGpuMat();
500
501 funcs[src.depth()](src, dst, stream);
502 }
503
RGBA_to_GRAY(InputArray _src,OutputArray _dst,int,Stream & stream)504 void RGBA_to_GRAY(InputArray _src, OutputArray _dst, int, Stream& stream)
505 {
506 using namespace cv::cuda::device;
507 static const gpu_func_t funcs[] = {RGBA_to_GRAY_8u, 0, RGBA_to_GRAY_16u, 0, 0, RGBA_to_GRAY_32f};
508
509 GpuMat src = _src.getGpuMat();
510
511 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
512 CV_Assert( src.channels() == 4 );
513
514 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 1));
515 GpuMat dst = _dst.getGpuMat();
516
517 funcs[src.depth()](src, dst, stream);
518 }
519
BGRA_to_GRAY(InputArray _src,OutputArray _dst,int,Stream & stream)520 void BGRA_to_GRAY(InputArray _src, OutputArray _dst, int, Stream& stream)
521 {
522 using namespace cv::cuda::device;
523 static const gpu_func_t funcs[] = {BGRA_to_GRAY_8u, 0, BGRA_to_GRAY_16u, 0, 0, BGRA_to_GRAY_32f};
524
525 GpuMat src = _src.getGpuMat();
526
527 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
528 CV_Assert( src.channels() == 4 );
529
530 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 1));
531 GpuMat dst = _dst.getGpuMat();
532
533 funcs[src.depth()](src, dst, stream);
534 }
535
RGB_to_YUV(InputArray _src,OutputArray _dst,int dcn,Stream & stream)536 void RGB_to_YUV(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
537 {
538 using namespace cv::cuda::device;
539 static const gpu_func_t funcs[2][2][6] =
540 {
541 {
542 {RGB_to_YUV_8u, 0, RGB_to_YUV_16u, 0, 0, RGB_to_YUV_32f},
543 {RGBA_to_YUV_8u, 0, RGBA_to_YUV_16u, 0, 0, RGBA_to_YUV_32f}
544 },
545 {
546 {RGB_to_YUV4_8u, 0, RGB_to_YUV4_16u, 0, 0, RGB_to_YUV4_32f},
547 {RGBA_to_YUV4_8u, 0, RGBA_to_YUV4_16u, 0, 0, RGBA_to_YUV4_32f}
548 }
549 };
550
551 if (dcn <= 0) dcn = 3;
552
553 GpuMat src = _src.getGpuMat();
554
555 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
556 CV_Assert( src.channels() == 3 || src.channels() == 4 );
557 CV_Assert( dcn == 3 || dcn == 4 );
558
559 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
560 GpuMat dst = _dst.getGpuMat();
561
562 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
563 }
564
BGR_to_YUV(InputArray _src,OutputArray _dst,int dcn,Stream & stream)565 void BGR_to_YUV(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
566 {
567 using namespace cv::cuda::device;
568 static const gpu_func_t funcs[2][2][6] =
569 {
570 {
571 {BGR_to_YUV_8u, 0, BGR_to_YUV_16u, 0, 0, BGR_to_YUV_32f},
572 {BGRA_to_YUV_8u, 0, BGRA_to_YUV_16u, 0, 0, BGRA_to_YUV_32f}
573 },
574 {
575 {BGR_to_YUV4_8u, 0, BGR_to_YUV4_16u, 0, 0, BGR_to_YUV4_32f},
576 {BGRA_to_YUV4_8u, 0, BGRA_to_YUV4_16u, 0, 0, BGRA_to_YUV4_32f}
577 }
578 };
579
580 if (dcn <= 0) dcn = 3;
581
582 GpuMat src = _src.getGpuMat();
583
584 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
585 CV_Assert( src.channels() == 3 || src.channels() == 4 );
586 CV_Assert( dcn == 3 || dcn == 4 );
587
588 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
589 GpuMat dst = _dst.getGpuMat();
590
591 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
592 }
593
YUV_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)594 void YUV_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
595 {
596 using namespace cv::cuda::device;
597 static const gpu_func_t funcs[2][2][6] =
598 {
599 {
600 {YUV_to_RGB_8u, 0, YUV_to_RGB_16u, 0, 0, YUV_to_RGB_32f},
601 {YUV4_to_RGB_8u, 0, YUV4_to_RGB_16u, 0, 0, YUV4_to_RGB_32f}
602 },
603 {
604 {YUV_to_RGBA_8u, 0, YUV_to_RGBA_16u, 0, 0, YUV_to_RGBA_32f},
605 {YUV4_to_RGBA_8u, 0, YUV4_to_RGBA_16u, 0, 0, YUV4_to_RGBA_32f}
606 }
607 };
608
609 if (dcn <= 0) dcn = 3;
610
611 GpuMat src = _src.getGpuMat();
612
613 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
614 CV_Assert( src.channels() == 3 || src.channels() == 4 );
615 CV_Assert( dcn == 3 || dcn == 4 );
616
617 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
618 GpuMat dst = _dst.getGpuMat();
619
620 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
621 }
622
YUV_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)623 void YUV_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
624 {
625 using namespace cv::cuda::device;
626 static const gpu_func_t funcs[2][2][6] =
627 {
628 {
629 {YUV_to_BGR_8u, 0, YUV_to_BGR_16u, 0, 0, YUV_to_BGR_32f},
630 {YUV4_to_BGR_8u, 0, YUV4_to_BGR_16u, 0, 0, YUV4_to_BGR_32f}
631 },
632 {
633 {YUV_to_BGRA_8u, 0, YUV_to_BGRA_16u, 0, 0, YUV_to_BGRA_32f},
634 {YUV4_to_BGRA_8u, 0, YUV4_to_BGRA_16u, 0, 0, YUV4_to_BGRA_32f}
635 }
636 };
637
638 if (dcn <= 0) dcn = 3;
639
640 GpuMat src = _src.getGpuMat();
641
642 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
643 CV_Assert( src.channels() == 3 || src.channels() == 4 );
644 CV_Assert( dcn == 3 || dcn == 4 );
645
646 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
647 GpuMat dst = _dst.getGpuMat();
648
649 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
650 }
651
RGB_to_YCrCb(InputArray _src,OutputArray _dst,int dcn,Stream & stream)652 void RGB_to_YCrCb(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
653 {
654 using namespace cv::cuda::device;
655 static const gpu_func_t funcs[2][2][6] =
656 {
657 {
658 {RGB_to_YCrCb_8u, 0, RGB_to_YCrCb_16u, 0, 0, RGB_to_YCrCb_32f},
659 {RGBA_to_YCrCb_8u, 0, RGBA_to_YCrCb_16u, 0, 0, RGBA_to_YCrCb_32f}
660 },
661 {
662 {RGB_to_YCrCb4_8u, 0, RGB_to_YCrCb4_16u, 0, 0, RGB_to_YCrCb4_32f},
663 {RGBA_to_YCrCb4_8u, 0, RGBA_to_YCrCb4_16u, 0, 0, RGBA_to_YCrCb4_32f}
664 }
665 };
666
667 if (dcn <= 0) dcn = 3;
668
669 GpuMat src = _src.getGpuMat();
670
671 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
672 CV_Assert( src.channels() == 3 || src.channels() == 4 );
673 CV_Assert( dcn == 3 || dcn == 4 );
674
675 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
676 GpuMat dst = _dst.getGpuMat();
677
678 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
679 }
680
BGR_to_YCrCb(InputArray _src,OutputArray _dst,int dcn,Stream & stream)681 void BGR_to_YCrCb(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
682 {
683 using namespace cv::cuda::device;
684 static const gpu_func_t funcs[2][2][6] =
685 {
686 {
687 {BGR_to_YCrCb_8u, 0, BGR_to_YCrCb_16u, 0, 0, BGR_to_YCrCb_32f},
688 {BGRA_to_YCrCb_8u, 0, BGRA_to_YCrCb_16u, 0, 0, BGRA_to_YCrCb_32f}
689 },
690 {
691 {BGR_to_YCrCb4_8u, 0, BGR_to_YCrCb4_16u, 0, 0, BGR_to_YCrCb4_32f},
692 {BGRA_to_YCrCb4_8u, 0, BGRA_to_YCrCb4_16u, 0, 0, BGRA_to_YCrCb4_32f}
693 }
694 };
695
696 if (dcn <= 0) dcn = 3;
697
698 GpuMat src = _src.getGpuMat();
699
700 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
701 CV_Assert( src.channels() == 3 || src.channels() == 4 );
702 CV_Assert( dcn == 3 || dcn == 4 );
703
704 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
705 GpuMat dst = _dst.getGpuMat();
706
707 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
708 }
709
YCrCb_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)710 void YCrCb_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
711 {
712 using namespace cv::cuda::device;
713 static const gpu_func_t funcs[2][2][6] =
714 {
715 {
716 {YCrCb_to_RGB_8u, 0, YCrCb_to_RGB_16u, 0, 0, YCrCb_to_RGB_32f},
717 {YCrCb4_to_RGB_8u, 0, YCrCb4_to_RGB_16u, 0, 0, YCrCb4_to_RGB_32f}
718 },
719 {
720 {YCrCb_to_RGBA_8u, 0, YCrCb_to_RGBA_16u, 0, 0, YCrCb_to_RGBA_32f},
721 {YCrCb4_to_RGBA_8u, 0, YCrCb4_to_RGBA_16u, 0, 0, YCrCb4_to_RGBA_32f}
722 }
723 };
724
725 if (dcn <= 0) dcn = 3;
726
727 GpuMat src = _src.getGpuMat();
728
729 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
730 CV_Assert( src.channels() == 3 || src.channels() == 4 );
731 CV_Assert( dcn == 3 || dcn == 4 );
732
733 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
734 GpuMat dst = _dst.getGpuMat();
735
736 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
737 }
738
YCrCb_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)739 void YCrCb_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
740 {
741 using namespace cv::cuda::device;
742 static const gpu_func_t funcs[2][2][6] =
743 {
744 {
745 {YCrCb_to_BGR_8u, 0, YCrCb_to_BGR_16u, 0, 0, YCrCb_to_BGR_32f},
746 {YCrCb4_to_BGR_8u, 0, YCrCb4_to_BGR_16u, 0, 0, YCrCb4_to_BGR_32f}
747 },
748 {
749 {YCrCb_to_BGRA_8u, 0, YCrCb_to_BGRA_16u, 0, 0, YCrCb_to_BGRA_32f},
750 {YCrCb4_to_BGRA_8u, 0, YCrCb4_to_BGRA_16u, 0, 0, YCrCb4_to_BGRA_32f}
751 }
752 };
753
754 if (dcn <= 0) dcn = 3;
755
756 GpuMat src = _src.getGpuMat();
757
758 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
759 CV_Assert( src.channels() == 3 || src.channels() == 4 );
760 CV_Assert( dcn == 3 || dcn == 4 );
761
762 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
763 GpuMat dst = _dst.getGpuMat();
764
765 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
766 }
767
RGB_to_XYZ(InputArray _src,OutputArray _dst,int dcn,Stream & stream)768 void RGB_to_XYZ(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
769 {
770 using namespace cv::cuda::device;
771 static const gpu_func_t funcs[2][2][6] =
772 {
773 {
774 {RGB_to_XYZ_8u, 0, RGB_to_XYZ_16u, 0, 0, RGB_to_XYZ_32f},
775 {RGBA_to_XYZ_8u, 0, RGBA_to_XYZ_16u, 0, 0, RGBA_to_XYZ_32f}
776 },
777 {
778 {RGB_to_XYZ4_8u, 0, RGB_to_XYZ4_16u, 0, 0, RGB_to_XYZ4_32f},
779 {RGBA_to_XYZ4_8u, 0, RGBA_to_XYZ4_16u, 0, 0, RGBA_to_XYZ4_32f}
780 }
781 };
782
783 if (dcn <= 0) dcn = 3;
784
785 GpuMat src = _src.getGpuMat();
786
787 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
788 CV_Assert( src.channels() == 3 || src.channels() == 4 );
789 CV_Assert( dcn == 3 || dcn == 4 );
790
791 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
792 GpuMat dst = _dst.getGpuMat();
793
794 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
795 }
796
BGR_to_XYZ(InputArray _src,OutputArray _dst,int dcn,Stream & stream)797 void BGR_to_XYZ(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
798 {
799 using namespace cv::cuda::device;
800 static const gpu_func_t funcs[2][2][6] =
801 {
802 {
803 {BGR_to_XYZ_8u, 0, BGR_to_XYZ_16u, 0, 0, BGR_to_XYZ_32f},
804 {BGRA_to_XYZ_8u, 0, BGRA_to_XYZ_16u, 0, 0, BGRA_to_XYZ_32f}
805 },
806 {
807 {BGR_to_XYZ4_8u, 0, BGR_to_XYZ4_16u, 0, 0, BGR_to_XYZ4_32f},
808 {BGRA_to_XYZ4_8u, 0, BGRA_to_XYZ4_16u, 0, 0, BGRA_to_XYZ4_32f}
809 }
810 };
811
812 if (dcn <= 0) dcn = 3;
813
814 GpuMat src = _src.getGpuMat();
815
816 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
817 CV_Assert( src.channels() == 3 || src.channels() == 4 );
818 CV_Assert( dcn == 3 || dcn == 4 );
819
820 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
821 GpuMat dst = _dst.getGpuMat();
822
823 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
824 }
825
XYZ_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)826 void XYZ_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
827 {
828 using namespace cv::cuda::device;
829 static const gpu_func_t funcs[2][2][6] =
830 {
831 {
832 {XYZ_to_RGB_8u, 0, XYZ_to_RGB_16u, 0, 0, XYZ_to_RGB_32f},
833 {XYZ4_to_RGB_8u, 0, XYZ4_to_RGB_16u, 0, 0, XYZ4_to_RGB_32f}
834 },
835 {
836 {XYZ_to_RGBA_8u, 0, XYZ_to_RGBA_16u, 0, 0, XYZ_to_RGBA_32f},
837 {XYZ4_to_RGBA_8u, 0, XYZ4_to_RGBA_16u, 0, 0, XYZ4_to_RGBA_32f}
838 }
839 };
840
841 if (dcn <= 0) dcn = 3;
842
843 GpuMat src = _src.getGpuMat();
844
845 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
846 CV_Assert( src.channels() == 3 || src.channels() == 4 );
847 CV_Assert( dcn == 3 || dcn == 4 );
848
849 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
850 GpuMat dst = _dst.getGpuMat();
851
852 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
853 }
854
XYZ_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)855 void XYZ_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
856 {
857 using namespace cv::cuda::device;
858 static const gpu_func_t funcs[2][2][6] =
859 {
860 {
861 {XYZ_to_BGR_8u, 0, XYZ_to_BGR_16u, 0, 0, XYZ_to_BGR_32f},
862 {XYZ4_to_BGR_8u, 0, XYZ4_to_BGR_16u, 0, 0, XYZ4_to_BGR_32f}
863 },
864 {
865 {XYZ_to_BGRA_8u, 0, XYZ_to_BGRA_16u, 0, 0, XYZ_to_BGRA_32f},
866 {XYZ4_to_BGRA_8u, 0, XYZ4_to_BGRA_16u, 0, 0, XYZ4_to_BGRA_32f}
867 }
868 };
869
870 if (dcn <= 0) dcn = 3;
871
872 GpuMat src = _src.getGpuMat();
873
874 CV_Assert( src.depth() == CV_8U || src.depth() == CV_16U || src.depth() == CV_32F );
875 CV_Assert( src.channels() == 3 || src.channels() == 4 );
876 CV_Assert( dcn == 3 || dcn == 4 );
877
878 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
879 GpuMat dst = _dst.getGpuMat();
880
881 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
882 }
883
RGB_to_HSV(InputArray _src,OutputArray _dst,int dcn,Stream & stream)884 void RGB_to_HSV(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
885 {
886 using namespace cv::cuda::device;
887 static const gpu_func_t funcs[2][2][6] =
888 {
889 {
890 {RGB_to_HSV_8u, 0, 0, 0, 0, RGB_to_HSV_32f},
891 {RGBA_to_HSV_8u, 0, 0, 0, 0, RGBA_to_HSV_32f},
892 },
893 {
894 {RGB_to_HSV4_8u, 0, 0, 0, 0, RGB_to_HSV4_32f},
895 {RGBA_to_HSV4_8u, 0, 0, 0, 0, RGBA_to_HSV4_32f},
896 }
897 };
898
899 if (dcn <= 0) dcn = 3;
900
901 GpuMat src = _src.getGpuMat();
902
903 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
904 CV_Assert( src.channels() == 3 || src.channels() == 4 );
905 CV_Assert( dcn == 3 || dcn == 4 );
906
907 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
908 GpuMat dst = _dst.getGpuMat();
909
910 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
911 }
912
BGR_to_HSV(InputArray _src,OutputArray _dst,int dcn,Stream & stream)913 void BGR_to_HSV(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
914 {
915 using namespace cv::cuda::device;
916 static const gpu_func_t funcs[2][2][6] =
917 {
918 {
919 {BGR_to_HSV_8u, 0, 0, 0, 0, BGR_to_HSV_32f},
920 {BGRA_to_HSV_8u, 0, 0, 0, 0, BGRA_to_HSV_32f}
921 },
922 {
923 {BGR_to_HSV4_8u, 0, 0, 0, 0, BGR_to_HSV4_32f},
924 {BGRA_to_HSV4_8u, 0, 0, 0, 0, BGRA_to_HSV4_32f}
925 }
926 };
927
928 if (dcn <= 0) dcn = 3;
929
930 GpuMat src = _src.getGpuMat();
931
932 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
933 CV_Assert( src.channels() == 3 || src.channels() == 4 );
934 CV_Assert( dcn == 3 || dcn == 4 );
935
936 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
937 GpuMat dst = _dst.getGpuMat();
938
939 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
940 }
941
HSV_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)942 void HSV_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
943 {
944 using namespace cv::cuda::device;
945 static const gpu_func_t funcs[2][2][6] =
946 {
947 {
948 {HSV_to_RGB_8u, 0, 0, 0, 0, HSV_to_RGB_32f},
949 {HSV4_to_RGB_8u, 0, 0, 0, 0, HSV4_to_RGB_32f}
950 },
951 {
952 {HSV_to_RGBA_8u, 0, 0, 0, 0, HSV_to_RGBA_32f},
953 {HSV4_to_RGBA_8u, 0, 0, 0, 0, HSV4_to_RGBA_32f}
954 }
955 };
956
957 if (dcn <= 0) dcn = 3;
958
959 GpuMat src = _src.getGpuMat();
960
961 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
962 CV_Assert( src.channels() == 3 || src.channels() == 4 );
963 CV_Assert( dcn == 3 || dcn == 4 );
964
965 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
966 GpuMat dst = _dst.getGpuMat();
967
968 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
969 }
970
HSV_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)971 void HSV_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
972 {
973 using namespace cv::cuda::device;
974 static const gpu_func_t funcs[2][2][6] =
975 {
976 {
977 {HSV_to_BGR_8u, 0, 0, 0, 0, HSV_to_BGR_32f},
978 {HSV4_to_BGR_8u, 0, 0, 0, 0, HSV4_to_BGR_32f}
979 },
980 {
981 {HSV_to_BGRA_8u, 0, 0, 0, 0, HSV_to_BGRA_32f},
982 {HSV4_to_BGRA_8u, 0, 0, 0, 0, HSV4_to_BGRA_32f}
983 }
984 };
985
986 if (dcn <= 0) dcn = 3;
987
988 GpuMat src = _src.getGpuMat();
989
990 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
991 CV_Assert( src.channels() == 3 || src.channels() == 4 );
992 CV_Assert( dcn == 3 || dcn == 4 );
993
994 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
995 GpuMat dst = _dst.getGpuMat();
996
997 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
998 }
999
RGB_to_HLS(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1000 void RGB_to_HLS(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1001 {
1002 using namespace cv::cuda::device;
1003 static const gpu_func_t funcs[2][2][6] =
1004 {
1005 {
1006 {RGB_to_HLS_8u, 0, 0, 0, 0, RGB_to_HLS_32f},
1007 {RGBA_to_HLS_8u, 0, 0, 0, 0, RGBA_to_HLS_32f},
1008 },
1009 {
1010 {RGB_to_HLS4_8u, 0, 0, 0, 0, RGB_to_HLS4_32f},
1011 {RGBA_to_HLS4_8u, 0, 0, 0, 0, RGBA_to_HLS4_32f},
1012 }
1013 };
1014
1015 if (dcn <= 0) dcn = 3;
1016
1017 GpuMat src = _src.getGpuMat();
1018
1019 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1020 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1021 CV_Assert( dcn == 3 || dcn == 4 );
1022
1023 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1024 GpuMat dst = _dst.getGpuMat();
1025
1026 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1027 }
1028
BGR_to_HLS(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1029 void BGR_to_HLS(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1030 {
1031 using namespace cv::cuda::device;
1032 static const gpu_func_t funcs[2][2][6] =
1033 {
1034 {
1035 {BGR_to_HLS_8u, 0, 0, 0, 0, BGR_to_HLS_32f},
1036 {BGRA_to_HLS_8u, 0, 0, 0, 0, BGRA_to_HLS_32f}
1037 },
1038 {
1039 {BGR_to_HLS4_8u, 0, 0, 0, 0, BGR_to_HLS4_32f},
1040 {BGRA_to_HLS4_8u, 0, 0, 0, 0, BGRA_to_HLS4_32f}
1041 }
1042 };
1043
1044 if (dcn <= 0) dcn = 3;
1045
1046 GpuMat src = _src.getGpuMat();
1047
1048 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1049 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1050 CV_Assert( dcn == 3 || dcn == 4 );
1051
1052 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1053 GpuMat dst = _dst.getGpuMat();
1054
1055 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1056 }
1057
HLS_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1058 void HLS_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1059 {
1060 using namespace cv::cuda::device;
1061 static const gpu_func_t funcs[2][2][6] =
1062 {
1063 {
1064 {HLS_to_RGB_8u, 0, 0, 0, 0, HLS_to_RGB_32f},
1065 {HLS4_to_RGB_8u, 0, 0, 0, 0, HLS4_to_RGB_32f}
1066 },
1067 {
1068 {HLS_to_RGBA_8u, 0, 0, 0, 0, HLS_to_RGBA_32f},
1069 {HLS4_to_RGBA_8u, 0, 0, 0, 0, HLS4_to_RGBA_32f}
1070 }
1071 };
1072
1073 if (dcn <= 0) dcn = 3;
1074
1075 GpuMat src = _src.getGpuMat();
1076
1077 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1078 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1079 CV_Assert( dcn == 3 || dcn == 4 );
1080
1081 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1082 GpuMat dst = _dst.getGpuMat();
1083
1084 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1085 }
1086
HLS_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1087 void HLS_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1088 {
1089 using namespace cv::cuda::device;
1090 static const gpu_func_t funcs[2][2][6] =
1091 {
1092 {
1093 {HLS_to_BGR_8u, 0, 0, 0, 0, HLS_to_BGR_32f},
1094 {HLS4_to_BGR_8u, 0, 0, 0, 0, HLS4_to_BGR_32f}
1095 },
1096 {
1097 {HLS_to_BGRA_8u, 0, 0, 0, 0, HLS_to_BGRA_32f},
1098 {HLS4_to_BGRA_8u, 0, 0, 0, 0, HLS4_to_BGRA_32f}
1099 }
1100 };
1101
1102 if (dcn <= 0) dcn = 3;
1103
1104 GpuMat src = _src.getGpuMat();
1105
1106 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1107 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1108 CV_Assert( dcn == 3 || dcn == 4 );
1109
1110 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1111 GpuMat dst = _dst.getGpuMat();
1112
1113 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1114 }
1115
RGB_to_HSV_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1116 void RGB_to_HSV_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1117 {
1118 using namespace cv::cuda::device;
1119 static const gpu_func_t funcs[2][2][6] =
1120 {
1121 {
1122 {RGB_to_HSV_FULL_8u, 0, 0, 0, 0, RGB_to_HSV_FULL_32f},
1123 {RGBA_to_HSV_FULL_8u, 0, 0, 0, 0, RGBA_to_HSV_FULL_32f},
1124 },
1125 {
1126 {RGB_to_HSV4_FULL_8u, 0, 0, 0, 0, RGB_to_HSV4_FULL_32f},
1127 {RGBA_to_HSV4_FULL_8u, 0, 0, 0, 0, RGBA_to_HSV4_FULL_32f},
1128 }
1129 };
1130
1131 if (dcn <= 0) dcn = 3;
1132
1133 GpuMat src = _src.getGpuMat();
1134
1135 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1136 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1137 CV_Assert( dcn == 3 || dcn == 4 );
1138
1139 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1140 GpuMat dst = _dst.getGpuMat();
1141
1142 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1143 }
1144
BGR_to_HSV_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1145 void BGR_to_HSV_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1146 {
1147 using namespace cv::cuda::device;
1148 static const gpu_func_t funcs[2][2][6] =
1149 {
1150 {
1151 {BGR_to_HSV_FULL_8u, 0, 0, 0, 0, BGR_to_HSV_FULL_32f},
1152 {BGRA_to_HSV_FULL_8u, 0, 0, 0, 0, BGRA_to_HSV_FULL_32f}
1153 },
1154 {
1155 {BGR_to_HSV4_FULL_8u, 0, 0, 0, 0, BGR_to_HSV4_FULL_32f},
1156 {BGRA_to_HSV4_FULL_8u, 0, 0, 0, 0, BGRA_to_HSV4_FULL_32f}
1157 }
1158 };
1159
1160 if (dcn <= 0) dcn = 3;
1161
1162 GpuMat src = _src.getGpuMat();
1163
1164 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1165 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1166 CV_Assert( dcn == 3 || dcn == 4 );
1167
1168 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1169 GpuMat dst = _dst.getGpuMat();
1170
1171 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1172 }
1173
HSV_to_RGB_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1174 void HSV_to_RGB_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1175 {
1176 using namespace cv::cuda::device;
1177 static const gpu_func_t funcs[2][2][6] =
1178 {
1179 {
1180 {HSV_to_RGB_FULL_8u, 0, 0, 0, 0, HSV_to_RGB_FULL_32f},
1181 {HSV4_to_RGB_FULL_8u, 0, 0, 0, 0, HSV4_to_RGB_FULL_32f}
1182 },
1183 {
1184 {HSV_to_RGBA_FULL_8u, 0, 0, 0, 0, HSV_to_RGBA_FULL_32f},
1185 {HSV4_to_RGBA_FULL_8u, 0, 0, 0, 0, HSV4_to_RGBA_FULL_32f}
1186 }
1187 };
1188
1189 if (dcn <= 0) dcn = 3;
1190
1191 GpuMat src = _src.getGpuMat();
1192
1193 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1194 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1195 CV_Assert( dcn == 3 || dcn == 4 );
1196
1197 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1198 GpuMat dst = _dst.getGpuMat();
1199
1200 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1201 }
1202
HSV_to_BGR_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1203 void HSV_to_BGR_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1204 {
1205 using namespace cv::cuda::device;
1206 static const gpu_func_t funcs[2][2][6] =
1207 {
1208 {
1209 {HSV_to_BGR_FULL_8u, 0, 0, 0, 0, HSV_to_BGR_FULL_32f},
1210 {HSV4_to_BGR_FULL_8u, 0, 0, 0, 0, HSV4_to_BGR_FULL_32f}
1211 },
1212 {
1213 {HSV_to_BGRA_FULL_8u, 0, 0, 0, 0, HSV_to_BGRA_FULL_32f},
1214 {HSV4_to_BGRA_FULL_8u, 0, 0, 0, 0, HSV4_to_BGRA_FULL_32f}
1215 }
1216 };
1217
1218 if (dcn <= 0) dcn = 3;
1219
1220 GpuMat src = _src.getGpuMat();
1221
1222 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1223 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1224 CV_Assert( dcn == 3 || dcn == 4 );
1225
1226 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1227 GpuMat dst = _dst.getGpuMat();
1228
1229 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1230 }
1231
RGB_to_HLS_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1232 void RGB_to_HLS_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1233 {
1234 using namespace cv::cuda::device;
1235 static const gpu_func_t funcs[2][2][6] =
1236 {
1237 {
1238 {RGB_to_HLS_FULL_8u, 0, 0, 0, 0, RGB_to_HLS_FULL_32f},
1239 {RGBA_to_HLS_FULL_8u, 0, 0, 0, 0, RGBA_to_HLS_FULL_32f},
1240 },
1241 {
1242 {RGB_to_HLS4_FULL_8u, 0, 0, 0, 0, RGB_to_HLS4_FULL_32f},
1243 {RGBA_to_HLS4_FULL_8u, 0, 0, 0, 0, RGBA_to_HLS4_FULL_32f},
1244 }
1245 };
1246
1247 if (dcn <= 0) dcn = 3;
1248
1249 GpuMat src = _src.getGpuMat();
1250
1251 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1252 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1253 CV_Assert( dcn == 3 || dcn == 4 );
1254
1255 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1256 GpuMat dst = _dst.getGpuMat();
1257
1258 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1259 }
1260
BGR_to_HLS_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1261 void BGR_to_HLS_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1262 {
1263 using namespace cv::cuda::device;
1264 static const gpu_func_t funcs[2][2][6] =
1265 {
1266 {
1267 {BGR_to_HLS_FULL_8u, 0, 0, 0, 0, BGR_to_HLS_FULL_32f},
1268 {BGRA_to_HLS_FULL_8u, 0, 0, 0, 0, BGRA_to_HLS_FULL_32f}
1269 },
1270 {
1271 {BGR_to_HLS4_FULL_8u, 0, 0, 0, 0, BGR_to_HLS4_FULL_32f},
1272 {BGRA_to_HLS4_FULL_8u, 0, 0, 0, 0, BGRA_to_HLS4_FULL_32f}
1273 }
1274 };
1275
1276 if (dcn <= 0) dcn = 3;
1277
1278 GpuMat src = _src.getGpuMat();
1279
1280 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1281 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1282 CV_Assert( dcn == 3 || dcn == 4 );
1283
1284 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1285 GpuMat dst = _dst.getGpuMat();
1286
1287 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1288 }
1289
HLS_to_RGB_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1290 void HLS_to_RGB_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1291 {
1292 using namespace cv::cuda::device;
1293 static const gpu_func_t funcs[2][2][6] =
1294 {
1295 {
1296 {HLS_to_RGB_FULL_8u, 0, 0, 0, 0, HLS_to_RGB_FULL_32f},
1297 {HLS4_to_RGB_FULL_8u, 0, 0, 0, 0, HLS4_to_RGB_FULL_32f}
1298 },
1299 {
1300 {HLS_to_RGBA_FULL_8u, 0, 0, 0, 0, HLS_to_RGBA_FULL_32f},
1301 {HLS4_to_RGBA_FULL_8u, 0, 0, 0, 0, HLS4_to_RGBA_FULL_32f}
1302 }
1303 };
1304
1305 if (dcn <= 0) dcn = 3;
1306
1307 GpuMat src = _src.getGpuMat();
1308
1309 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1310 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1311 CV_Assert( dcn == 3 || dcn == 4 );
1312
1313 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1314 GpuMat dst = _dst.getGpuMat();
1315
1316 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1317 }
1318
HLS_to_BGR_FULL(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1319 void HLS_to_BGR_FULL(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1320 {
1321 using namespace cv::cuda::device;
1322 static const gpu_func_t funcs[2][2][6] =
1323 {
1324 {
1325 {HLS_to_BGR_FULL_8u, 0, 0, 0, 0, HLS_to_BGR_FULL_32f},
1326 {HLS4_to_BGR_FULL_8u, 0, 0, 0, 0, HLS4_to_BGR_FULL_32f}
1327 },
1328 {
1329 {HLS_to_BGRA_FULL_8u, 0, 0, 0, 0, HLS_to_BGRA_FULL_32f},
1330 {HLS4_to_BGRA_FULL_8u, 0, 0, 0, 0, HLS4_to_BGRA_FULL_32f}
1331 }
1332 };
1333
1334 if (dcn <= 0) dcn = 3;
1335
1336 GpuMat src = _src.getGpuMat();
1337
1338 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1339 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1340 CV_Assert( dcn == 3 || dcn == 4 );
1341
1342 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1343 GpuMat dst = _dst.getGpuMat();
1344
1345 funcs[dcn == 4][src.channels() == 4][src.depth()](src, dst, stream);
1346 }
1347
BGR_to_Lab(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1348 void BGR_to_Lab(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1349 {
1350 using namespace cv::cuda::device;
1351 static const gpu_func_t funcs[2][2][2] =
1352 {
1353 {
1354 {BGR_to_Lab_8u, BGR_to_Lab_32f},
1355 {BGRA_to_Lab_8u, BGRA_to_Lab_32f}
1356 },
1357 {
1358 {BGR_to_Lab4_8u, BGR_to_Lab4_32f},
1359 {BGRA_to_Lab4_8u, BGRA_to_Lab4_32f}
1360 }
1361 };
1362
1363 if (dcn <= 0) dcn = 3;
1364
1365 GpuMat src = _src.getGpuMat();
1366
1367 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1368 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1369 CV_Assert( dcn == 3 || dcn == 4 );
1370
1371 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1372 GpuMat dst = _dst.getGpuMat();
1373
1374 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1375 }
1376
RGB_to_Lab(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1377 void RGB_to_Lab(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1378 {
1379 using namespace cv::cuda::device;
1380 static const gpu_func_t funcs[2][2][2] =
1381 {
1382 {
1383 {RGB_to_Lab_8u, RGB_to_Lab_32f},
1384 {RGBA_to_Lab_8u, RGBA_to_Lab_32f}
1385 },
1386 {
1387 {RGB_to_Lab4_8u, RGB_to_Lab4_32f},
1388 {RGBA_to_Lab4_8u, RGBA_to_Lab4_32f}
1389 }
1390 };
1391
1392 if (dcn <= 0) dcn = 3;
1393
1394 GpuMat src = _src.getGpuMat();
1395
1396 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1397 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1398 CV_Assert( dcn == 3 || dcn == 4 );
1399
1400 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1401 GpuMat dst = _dst.getGpuMat();
1402
1403 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1404 }
1405
LBGR_to_Lab(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1406 void LBGR_to_Lab(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1407 {
1408 using namespace cv::cuda::device;
1409 static const gpu_func_t funcs[2][2][2] =
1410 {
1411 {
1412 {LBGR_to_Lab_8u, LBGR_to_Lab_32f},
1413 {LBGRA_to_Lab_8u, LBGRA_to_Lab_32f}
1414 },
1415 {
1416 {LBGR_to_Lab4_8u, LBGR_to_Lab4_32f},
1417 {LBGRA_to_Lab4_8u, LBGRA_to_Lab4_32f}
1418 }
1419 };
1420
1421 if (dcn <= 0) dcn = 3;
1422
1423 GpuMat src = _src.getGpuMat();
1424
1425 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1426 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1427 CV_Assert( dcn == 3 || dcn == 4 );
1428
1429 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1430 GpuMat dst = _dst.getGpuMat();
1431
1432 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1433 }
1434
LRGB_to_Lab(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1435 void LRGB_to_Lab(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1436 {
1437 using namespace cv::cuda::device;
1438 static const gpu_func_t funcs[2][2][2] =
1439 {
1440 {
1441 {LRGB_to_Lab_8u, LRGB_to_Lab_32f},
1442 {LRGBA_to_Lab_8u, LRGBA_to_Lab_32f}
1443 },
1444 {
1445 {LRGB_to_Lab4_8u, LRGB_to_Lab4_32f},
1446 {LRGBA_to_Lab4_8u, LRGBA_to_Lab4_32f}
1447 }
1448 };
1449
1450 if (dcn <= 0) dcn = 3;
1451
1452 GpuMat src = _src.getGpuMat();
1453
1454 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1455 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1456 CV_Assert( dcn == 3 || dcn == 4 );
1457
1458 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1459 GpuMat dst = _dst.getGpuMat();
1460
1461 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1462 }
1463
Lab_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1464 void Lab_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1465 {
1466 using namespace cv::cuda::device;
1467 static const gpu_func_t funcs[2][2][2] =
1468 {
1469 {
1470 {Lab_to_BGR_8u, Lab_to_BGR_32f},
1471 {Lab4_to_BGR_8u, Lab4_to_BGR_32f}
1472 },
1473 {
1474 {Lab_to_BGRA_8u, Lab_to_BGRA_32f},
1475 {Lab4_to_BGRA_8u, Lab4_to_BGRA_32f}
1476 }
1477 };
1478
1479 if (dcn <= 0) dcn = 3;
1480
1481 GpuMat src = _src.getGpuMat();
1482
1483 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1484 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1485 CV_Assert( dcn == 3 || dcn == 4 );
1486
1487 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1488 GpuMat dst = _dst.getGpuMat();
1489
1490 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1491 }
1492
Lab_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1493 void Lab_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1494 {
1495 using namespace cv::cuda::device;
1496 static const gpu_func_t funcs[2][2][2] =
1497 {
1498 {
1499 {Lab_to_RGB_8u, Lab_to_RGB_32f},
1500 {Lab4_to_RGB_8u, Lab4_to_RGB_32f}
1501 },
1502 {
1503 {Lab_to_RGBA_8u, Lab_to_RGBA_32f},
1504 {Lab4_to_RGBA_8u, Lab4_to_RGBA_32f}
1505 }
1506 };
1507
1508 if (dcn <= 0) dcn = 3;
1509
1510 GpuMat src = _src.getGpuMat();
1511
1512 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1513 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1514 CV_Assert( dcn == 3 || dcn == 4 );
1515
1516 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1517 GpuMat dst = _dst.getGpuMat();
1518
1519 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1520 }
1521
Lab_to_LBGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1522 void Lab_to_LBGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1523 {
1524 using namespace cv::cuda::device;
1525 static const gpu_func_t funcs[2][2][2] =
1526 {
1527 {
1528 {Lab_to_LBGR_8u, Lab_to_LBGR_32f},
1529 {Lab4_to_LBGR_8u, Lab4_to_LBGR_32f}
1530 },
1531 {
1532 {Lab_to_LBGRA_8u, Lab_to_LBGRA_32f},
1533 {Lab4_to_LBGRA_8u, Lab4_to_LBGRA_32f}
1534 }
1535 };
1536
1537 if (dcn <= 0) dcn = 3;
1538
1539 GpuMat src = _src.getGpuMat();
1540
1541 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1542 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1543 CV_Assert( dcn == 3 || dcn == 4 );
1544
1545 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1546 GpuMat dst = _dst.getGpuMat();
1547
1548 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1549 }
1550
Lab_to_LRGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1551 void Lab_to_LRGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1552 {
1553 using namespace cv::cuda::device;
1554 static const gpu_func_t funcs[2][2][2] =
1555 {
1556 {
1557 {Lab_to_LRGB_8u, Lab_to_LRGB_32f},
1558 {Lab4_to_LRGB_8u, Lab4_to_LRGB_32f}
1559 },
1560 {
1561 {Lab_to_LRGBA_8u, Lab_to_LRGBA_32f},
1562 {Lab4_to_LRGBA_8u, Lab4_to_LRGBA_32f}
1563 }
1564 };
1565
1566 if (dcn <= 0) dcn = 3;
1567
1568 GpuMat src = _src.getGpuMat();
1569
1570 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1571 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1572 CV_Assert( dcn == 3 || dcn == 4 );
1573
1574 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1575 GpuMat dst = _dst.getGpuMat();
1576
1577 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1578 }
1579
BGR_to_Luv(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1580 void BGR_to_Luv(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1581 {
1582 using namespace cv::cuda::device;
1583 static const gpu_func_t funcs[2][2][2] =
1584 {
1585 {
1586 {BGR_to_Luv_8u, BGR_to_Luv_32f},
1587 {BGRA_to_Luv_8u, BGRA_to_Luv_32f}
1588 },
1589 {
1590 {BGR_to_Luv4_8u, BGR_to_Luv4_32f},
1591 {BGRA_to_Luv4_8u, BGRA_to_Luv4_32f}
1592 }
1593 };
1594
1595 if (dcn <= 0) dcn = 3;
1596
1597 GpuMat src = _src.getGpuMat();
1598
1599 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1600 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1601 CV_Assert( dcn == 3 || dcn == 4 );
1602
1603 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1604 GpuMat dst = _dst.getGpuMat();
1605
1606 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1607 }
1608
RGB_to_Luv(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1609 void RGB_to_Luv(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1610 {
1611 using namespace cv::cuda::device;
1612 static const gpu_func_t funcs[2][2][2] =
1613 {
1614 {
1615 {RGB_to_Luv_8u, RGB_to_Luv_32f},
1616 {RGBA_to_Luv_8u, RGBA_to_Luv_32f}
1617 },
1618 {
1619 {RGB_to_Luv4_8u, RGB_to_Luv4_32f},
1620 {RGBA_to_Luv4_8u, RGBA_to_Luv4_32f}
1621 }
1622 };
1623
1624 if (dcn <= 0) dcn = 3;
1625
1626 GpuMat src = _src.getGpuMat();
1627
1628 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1629 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1630 CV_Assert( dcn == 3 || dcn == 4 );
1631
1632 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1633 GpuMat dst = _dst.getGpuMat();
1634
1635 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1636 }
1637
LBGR_to_Luv(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1638 void LBGR_to_Luv(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1639 {
1640 using namespace cv::cuda::device;
1641 static const gpu_func_t funcs[2][2][2] =
1642 {
1643 {
1644 {LBGR_to_Luv_8u, LBGR_to_Luv_32f},
1645 {LBGRA_to_Luv_8u, LBGRA_to_Luv_32f}
1646 },
1647 {
1648 {LBGR_to_Luv4_8u, LBGR_to_Luv4_32f},
1649 {LBGRA_to_Luv4_8u, LBGRA_to_Luv4_32f}
1650 }
1651 };
1652
1653 if (dcn <= 0) dcn = 3;
1654
1655 GpuMat src = _src.getGpuMat();
1656
1657 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1658 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1659 CV_Assert( dcn == 3 || dcn == 4 );
1660
1661 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1662 GpuMat dst = _dst.getGpuMat();
1663
1664 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1665 }
1666
LRGB_to_Luv(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1667 void LRGB_to_Luv(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1668 {
1669 using namespace cv::cuda::device;
1670 static const gpu_func_t funcs[2][2][2] =
1671 {
1672 {
1673 {LRGB_to_Luv_8u, LRGB_to_Luv_32f},
1674 {LRGBA_to_Luv_8u, LRGBA_to_Luv_32f}
1675 },
1676 {
1677 {LRGB_to_Luv4_8u, LRGB_to_Luv4_32f},
1678 {LRGBA_to_Luv4_8u, LRGBA_to_Luv4_32f}
1679 }
1680 };
1681
1682 if (dcn <= 0) dcn = 3;
1683
1684 GpuMat src = _src.getGpuMat();
1685
1686 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1687 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1688 CV_Assert( dcn == 3 || dcn == 4 );
1689
1690 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1691 GpuMat dst = _dst.getGpuMat();
1692
1693 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1694 }
1695
Luv_to_BGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1696 void Luv_to_BGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1697 {
1698 using namespace cv::cuda::device;
1699 static const gpu_func_t funcs[2][2][2] =
1700 {
1701 {
1702 {Luv_to_BGR_8u, Luv_to_BGR_32f},
1703 {Luv4_to_BGR_8u, Luv4_to_BGR_32f}
1704 },
1705 {
1706 {Luv_to_BGRA_8u, Luv_to_BGRA_32f},
1707 {Luv4_to_BGRA_8u, Luv4_to_BGRA_32f}
1708 }
1709 };
1710
1711 if (dcn <= 0) dcn = 3;
1712
1713 GpuMat src = _src.getGpuMat();
1714
1715 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1716 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1717 CV_Assert( dcn == 3 || dcn == 4 );
1718
1719 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1720 GpuMat dst = _dst.getGpuMat();
1721
1722 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1723 }
1724
Luv_to_RGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1725 void Luv_to_RGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1726 {
1727 using namespace cv::cuda::device;
1728 static const gpu_func_t funcs[2][2][2] =
1729 {
1730 {
1731 {Luv_to_RGB_8u, Luv_to_RGB_32f},
1732 {Luv4_to_RGB_8u, Luv4_to_RGB_32f}
1733 },
1734 {
1735 {Luv_to_RGBA_8u, Luv_to_RGBA_32f},
1736 {Luv4_to_RGBA_8u, Luv4_to_RGBA_32f}
1737 }
1738 };
1739
1740 if (dcn <= 0) dcn = 3;
1741
1742 GpuMat src = _src.getGpuMat();
1743
1744 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1745 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1746 CV_Assert( dcn == 3 || dcn == 4 );
1747
1748 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1749 GpuMat dst = _dst.getGpuMat();
1750
1751 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1752 }
1753
Luv_to_LBGR(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1754 void Luv_to_LBGR(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1755 {
1756 using namespace cv::cuda::device;
1757 static const gpu_func_t funcs[2][2][2] =
1758 {
1759 {
1760 {Luv_to_LBGR_8u, Luv_to_LBGR_32f},
1761 {Luv4_to_LBGR_8u, Luv4_to_LBGR_32f}
1762 },
1763 {
1764 {Luv_to_LBGRA_8u, Luv_to_LBGRA_32f},
1765 {Luv4_to_LBGRA_8u, Luv4_to_LBGRA_32f}
1766 }
1767 };
1768
1769 if (dcn <= 0) dcn = 3;
1770
1771 GpuMat src = _src.getGpuMat();
1772
1773 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1774 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1775 CV_Assert( dcn == 3 || dcn == 4 );
1776
1777 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1778 GpuMat dst = _dst.getGpuMat();
1779
1780 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1781 }
1782
Luv_to_LRGB(InputArray _src,OutputArray _dst,int dcn,Stream & stream)1783 void Luv_to_LRGB(InputArray _src, OutputArray _dst, int dcn, Stream& stream)
1784 {
1785 using namespace cv::cuda::device;
1786 static const gpu_func_t funcs[2][2][2] =
1787 {
1788 {
1789 {Luv_to_LRGB_8u, Luv_to_LRGB_32f},
1790 {Luv4_to_LRGB_8u, Luv4_to_LRGB_32f}
1791 },
1792 {
1793 {Luv_to_LRGBA_8u, Luv_to_LRGBA_32f},
1794 {Luv4_to_LRGBA_8u, Luv4_to_LRGBA_32f}
1795 }
1796 };
1797
1798 if (dcn <= 0) dcn = 3;
1799
1800 GpuMat src = _src.getGpuMat();
1801
1802 CV_Assert( src.depth() == CV_8U || src.depth() == CV_32F );
1803 CV_Assert( src.channels() == 3 || src.channels() == 4 );
1804 CV_Assert( dcn == 3 || dcn == 4 );
1805
1806 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1807 GpuMat dst = _dst.getGpuMat();
1808
1809 funcs[dcn == 4][src.channels() == 4][src.depth() == CV_32F](src, dst, stream);
1810 }
1811
RGBA_to_mBGRA(InputArray _src,OutputArray _dst,int,Stream & _stream)1812 void RGBA_to_mBGRA(InputArray _src, OutputArray _dst, int, Stream& _stream)
1813 {
1814 #if (CUDA_VERSION < 5000)
1815 (void) _src;
1816 (void) _dst;
1817 (void) _stream;
1818 CV_Error( Error::StsBadFlag, "Unknown/unsupported color conversion code" );
1819 #else
1820 GpuMat src = _src.getGpuMat();
1821
1822 CV_Assert( src.type() == CV_8UC4 || src.type() == CV_16UC4 );
1823
1824 _dst.create(src.size(), src.type());
1825 GpuMat dst = _dst.getGpuMat();
1826
1827 cudaStream_t stream = StreamAccessor::getStream(_stream);
1828 NppStreamHandler h(stream);
1829
1830 NppiSize oSizeROI;
1831 oSizeROI.width = src.cols;
1832 oSizeROI.height = src.rows;
1833
1834 if (src.depth() == CV_8U)
1835 nppSafeCall( nppiAlphaPremul_8u_AC4R(src.ptr<Npp8u>(), static_cast<int>(src.step), dst.ptr<Npp8u>(), static_cast<int>(dst.step), oSizeROI) );
1836 else
1837 nppSafeCall( nppiAlphaPremul_16u_AC4R(src.ptr<Npp16u>(), static_cast<int>(src.step), dst.ptr<Npp16u>(), static_cast<int>(dst.step), oSizeROI) );
1838
1839 if (stream == 0)
1840 cudaSafeCall( cudaDeviceSynchronize() );
1841 #endif
1842 }
1843
bayer_to_BGR(InputArray _src,OutputArray _dst,int dcn,bool blue_last,bool start_with_green,Stream & stream)1844 void bayer_to_BGR(InputArray _src, OutputArray _dst, int dcn, bool blue_last, bool start_with_green, Stream& stream)
1845 {
1846 typedef void (*func_t)(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream);
1847 static const func_t funcs[3][4] =
1848 {
1849 {0,0,Bayer2BGR_8u_gpu<3>, Bayer2BGR_8u_gpu<4>},
1850 {0,0,0,0},
1851 {0,0,Bayer2BGR_16u_gpu<3>, Bayer2BGR_16u_gpu<4>}
1852 };
1853
1854 if (dcn <= 0) dcn = 3;
1855
1856 GpuMat src = _src.getGpuMat();
1857
1858 CV_Assert( src.type() == CV_8UC1 || src.type() == CV_16UC1 );
1859 CV_Assert( src.rows > 2 && src.cols > 2 );
1860 CV_Assert( dcn == 3 || dcn == 4 );
1861
1862 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), dcn));
1863 GpuMat dst = _dst.getGpuMat();
1864
1865 funcs[src.depth()][dcn - 1](src, dst, blue_last, start_with_green, StreamAccessor::getStream(stream));
1866 }
bayerBG_to_BGR(InputArray src,OutputArray dst,int dcn,Stream & stream)1867 void bayerBG_to_BGR(InputArray src, OutputArray dst, int dcn, Stream& stream)
1868 {
1869 bayer_to_BGR(src, dst, dcn, false, false, stream);
1870 }
bayeRGB_to_BGR(InputArray src,OutputArray dst,int dcn,Stream & stream)1871 void bayeRGB_to_BGR(InputArray src, OutputArray dst, int dcn, Stream& stream)
1872 {
1873 bayer_to_BGR(src, dst, dcn, false, true, stream);
1874 }
bayerRG_to_BGR(InputArray src,OutputArray dst,int dcn,Stream & stream)1875 void bayerRG_to_BGR(InputArray src, OutputArray dst, int dcn, Stream& stream)
1876 {
1877 bayer_to_BGR(src, dst, dcn, true, false, stream);
1878 }
bayerGR_to_BGR(InputArray src,OutputArray dst,int dcn,Stream & stream)1879 void bayerGR_to_BGR(InputArray src, OutputArray dst, int dcn, Stream& stream)
1880 {
1881 bayer_to_BGR(src, dst, dcn, true, true, stream);
1882 }
1883
bayer_to_gray(InputArray _src,OutputArray _dst,bool blue_last,bool start_with_green,Stream & stream)1884 void bayer_to_gray(InputArray _src, OutputArray _dst, bool blue_last, bool start_with_green, Stream& stream)
1885 {
1886 typedef void (*func_t)(PtrStepSzb src, PtrStepSzb dst, bool blue_last, bool start_with_green, cudaStream_t stream);
1887 static const func_t funcs[3] =
1888 {
1889 Bayer2BGR_8u_gpu<1>,
1890 0,
1891 Bayer2BGR_16u_gpu<1>,
1892 };
1893
1894 GpuMat src = _src.getGpuMat();
1895
1896 CV_Assert( src.type() == CV_8UC1 || src.type() == CV_16UC1 );
1897 CV_Assert( src.rows > 2 && src.cols > 2 );
1898
1899 _dst.create(src.size(), CV_MAKE_TYPE(src.depth(), 1));
1900 GpuMat dst = _dst.getGpuMat();
1901
1902 funcs[src.depth()](src, dst, blue_last, start_with_green, StreamAccessor::getStream(stream));
1903 }
bayerBG_to_gray(InputArray src,OutputArray dst,int,Stream & stream)1904 void bayerBG_to_gray(InputArray src, OutputArray dst, int /*dcn*/, Stream& stream)
1905 {
1906 bayer_to_gray(src, dst, false, false, stream);
1907 }
bayeRGB_to_GRAY(InputArray src,OutputArray dst,int,Stream & stream)1908 void bayeRGB_to_GRAY(InputArray src, OutputArray dst, int /*dcn*/, Stream& stream)
1909 {
1910 bayer_to_gray(src, dst, false, true, stream);
1911 }
bayerRG_to_gray(InputArray src,OutputArray dst,int,Stream & stream)1912 void bayerRG_to_gray(InputArray src, OutputArray dst, int /*dcn*/, Stream& stream)
1913 {
1914 bayer_to_gray(src, dst, true, false, stream);
1915 }
bayerGR_to_gray(InputArray src,OutputArray dst,int,Stream & stream)1916 void bayerGR_to_gray(InputArray src, OutputArray dst, int /*dcn*/, Stream& stream)
1917 {
1918 bayer_to_gray(src, dst, true, true, stream);
1919 }
1920 }
1921
1922 ////////////////////////////////////////////////////////////////////////
1923 // cvtColor
1924
cvtColor(InputArray src,OutputArray dst,int code,int dcn,Stream & stream)1925 void cv::cuda::cvtColor(InputArray src, OutputArray dst, int code, int dcn, Stream& stream)
1926 {
1927 typedef void (*func_t)(InputArray src, OutputArray dst, int dcn, Stream& stream);
1928 static const func_t funcs[] =
1929 {
1930 BGR_to_BGRA, // CV_BGR2BGRA =0
1931 BGRA_to_BGR, // CV_BGRA2BGR =1
1932 BGR_to_RGBA, // CV_BGR2RGBA =2
1933 BGRA_to_RGB, // CV_RGBA2BGR =3
1934 BGR_to_RGB, // CV_BGR2RGB =4
1935 BGRA_to_RGBA, // CV_BGRA2RGBA =5
1936
1937 BGR_to_GRAY, // CV_BGR2GRAY =6
1938 RGB_to_GRAY, // CV_RGB2GRAY =7
1939 GRAY_to_BGR, // CV_GRAY2BGR =8
1940 GRAY_to_BGRA, // CV_GRAY2BGRA =9
1941 BGRA_to_GRAY, // CV_BGRA2GRAY =10
1942 RGBA_to_GRAY, // CV_RGBA2GRAY =11
1943
1944 BGR_to_BGR565, // CV_BGR2BGR565 =12
1945 RGB_to_BGR565, // CV_RGB2BGR565 =13
1946 BGR565_to_BGR, // CV_BGR5652BGR =14
1947 BGR565_to_RGB, // CV_BGR5652RGB =15
1948 BGRA_to_BGR565, // CV_BGRA2BGR565 =16
1949 RGBA_to_BGR565, // CV_RGBA2BGR565 =17
1950 BGR565_to_BGRA, // CV_BGR5652BGRA =18
1951 BGR565_to_RGBA, // CV_BGR5652RGBA =19
1952
1953 GRAY_to_BGR565, // CV_GRAY2BGR565 =20
1954 BGR565_to_GRAY, // CV_BGR5652GRAY =21
1955
1956 BGR_to_BGR555, // CV_BGR2BGR555 =22
1957 RGB_to_BGR555, // CV_RGB2BGR555 =23
1958 BGR555_to_BGR, // CV_BGR5552BGR =24
1959 BGR555_to_RGB, // CV_BGR5552RGB =25
1960 BGRA_to_BGR555, // CV_BGRA2BGR555 =26
1961 RGBA_to_BGR555, // CV_RGBA2BGR555 =27
1962 BGR555_to_BGRA, // CV_BGR5552BGRA =28
1963 BGR555_to_RGBA, // CV_BGR5552RGBA =29
1964
1965 GRAY_to_BGR555, // CV_GRAY2BGR555 =30
1966 BGR555_to_GRAY, // CV_BGR5552GRAY =31
1967
1968 BGR_to_XYZ, // CV_BGR2XYZ =32
1969 RGB_to_XYZ, // CV_RGB2XYZ =33
1970 XYZ_to_BGR, // CV_XYZ2BGR =34
1971 XYZ_to_RGB, // CV_XYZ2RGB =35
1972
1973 BGR_to_YCrCb, // CV_BGR2YCrCb =36
1974 RGB_to_YCrCb, // CV_RGB2YCrCb =37
1975 YCrCb_to_BGR, // CV_YCrCb2BGR =38
1976 YCrCb_to_RGB, // CV_YCrCb2RGB =39
1977
1978 BGR_to_HSV, // CV_BGR2HSV =40
1979 RGB_to_HSV, // CV_RGB2HSV =41
1980
1981 0, // =42
1982 0, // =43
1983
1984 BGR_to_Lab, // CV_BGR2Lab =44
1985 RGB_to_Lab, // CV_RGB2Lab =45
1986
1987 bayerBG_to_BGR, // CV_BayerBG2BGR =46
1988 bayeRGB_to_BGR, // CV_BayeRGB2BGR =47
1989 bayerRG_to_BGR, // CV_BayerRG2BGR =48
1990 bayerGR_to_BGR, // CV_BayerGR2BGR =49
1991
1992 BGR_to_Luv, // CV_BGR2Luv =50
1993 RGB_to_Luv, // CV_RGB2Luv =51
1994
1995 BGR_to_HLS, // CV_BGR2HLS =52
1996 RGB_to_HLS, // CV_RGB2HLS =53
1997
1998 HSV_to_BGR, // CV_HSV2BGR =54
1999 HSV_to_RGB, // CV_HSV2RGB =55
2000
2001 Lab_to_BGR, // CV_Lab2BGR =56
2002 Lab_to_RGB, // CV_Lab2RGB =57
2003 Luv_to_BGR, // CV_Luv2BGR =58
2004 Luv_to_RGB, // CV_Luv2RGB =59
2005
2006 HLS_to_BGR, // CV_HLS2BGR =60
2007 HLS_to_RGB, // CV_HLS2RGB =61
2008
2009 0, // CV_BayerBG2BGR_VNG =62
2010 0, // CV_BayeRGB2BGR_VNG =63
2011 0, // CV_BayerRG2BGR_VNG =64
2012 0, // CV_BayerGR2BGR_VNG =65
2013
2014 BGR_to_HSV_FULL, // CV_BGR2HSV_FULL = 66
2015 RGB_to_HSV_FULL, // CV_RGB2HSV_FULL = 67
2016 BGR_to_HLS_FULL, // CV_BGR2HLS_FULL = 68
2017 RGB_to_HLS_FULL, // CV_RGB2HLS_FULL = 69
2018
2019 HSV_to_BGR_FULL, // CV_HSV2BGR_FULL = 70
2020 HSV_to_RGB_FULL, // CV_HSV2RGB_FULL = 71
2021 HLS_to_BGR_FULL, // CV_HLS2BGR_FULL = 72
2022 HLS_to_RGB_FULL, // CV_HLS2RGB_FULL = 73
2023
2024 LBGR_to_Lab, // CV_LBGR2Lab = 74
2025 LRGB_to_Lab, // CV_LRGB2Lab = 75
2026 LBGR_to_Luv, // CV_LBGR2Luv = 76
2027 LRGB_to_Luv, // CV_LRGB2Luv = 77
2028
2029 Lab_to_LBGR, // CV_Lab2LBGR = 78
2030 Lab_to_LRGB, // CV_Lab2LRGB = 79
2031 Luv_to_LBGR, // CV_Luv2LBGR = 80
2032 Luv_to_LRGB, // CV_Luv2LRGB = 81
2033
2034 BGR_to_YUV, // CV_BGR2YUV = 82
2035 RGB_to_YUV, // CV_RGB2YUV = 83
2036 YUV_to_BGR, // CV_YUV2BGR = 84
2037 YUV_to_RGB, // CV_YUV2RGB = 85
2038
2039 bayerBG_to_gray, // CV_BayerBG2GRAY = 86
2040 bayeRGB_to_GRAY, // CV_BayeRGB2GRAY = 87
2041 bayerRG_to_gray, // CV_BayerRG2GRAY = 88
2042 bayerGR_to_gray, // CV_BayerGR2GRAY = 89
2043
2044 //YUV 4:2:0 formats family
2045 0, // CV_YUV2RGB_NV12 = 90,
2046 0, // CV_YUV2BGR_NV12 = 91,
2047 0, // CV_YUV2RGB_NV21 = 92,
2048 0, // CV_YUV2BGR_NV21 = 93,
2049
2050 0, // CV_YUV2RGBA_NV12 = 94,
2051 0, // CV_YUV2BGRA_NV12 = 95,
2052 0, // CV_YUV2RGBA_NV21 = 96,
2053 0, // CV_YUV2BGRA_NV21 = 97,
2054
2055 0, // CV_YUV2RGB_YV12 = 98,
2056 0, // CV_YUV2BGR_YV12 = 99,
2057 0, // CV_YUV2RGB_IYUV = 100,
2058 0, // CV_YUV2BGR_IYUV = 101,
2059
2060 0, // CV_YUV2RGBA_YV12 = 102,
2061 0, // CV_YUV2BGRA_YV12 = 103,
2062 0, // CV_YUV2RGBA_IYUV = 104,
2063 0, // CV_YUV2BGRA_IYUV = 105,
2064
2065 0, // CV_YUV2GRAY_420 = 106,
2066
2067 //YUV 4:2:2 formats family
2068 0, // CV_YUV2RGB_UYVY = 107,
2069 0, // CV_YUV2BGR_UYVY = 108,
2070 0, // //CV_YUV2RGB_VYUY = 109,
2071 0, // //CV_YUV2BGR_VYUY = 110,
2072
2073 0, // CV_YUV2RGBA_UYVY = 111,
2074 0, // CV_YUV2BGRA_UYVY = 112,
2075 0, // //CV_YUV2RGBA_VYUY = 113,
2076 0, // //CV_YUV2BGRA_VYUY = 114,
2077
2078 0, // CV_YUV2RGB_YUY2 = 115,
2079 0, // CV_YUV2BGR_YUY2 = 116,
2080 0, // CV_YUV2RGB_YVYU = 117,
2081 0, // CV_YUV2BGR_YVYU = 118,
2082
2083 0, // CV_YUV2RGBA_YUY2 = 119,
2084 0, // CV_YUV2BGRA_YUY2 = 120,
2085 0, // CV_YUV2RGBA_YVYU = 121,
2086 0, // CV_YUV2BGRA_YVYU = 122,
2087
2088 0, // CV_YUV2GRAY_UYVY = 123,
2089 0, // CV_YUV2GRAY_YUY2 = 124,
2090
2091 // alpha premultiplication
2092 RGBA_to_mBGRA, // CV_RGBA2mRGBA = 125,
2093 0, // CV_mRGBA2RGBA = 126,
2094
2095 0, // CV_COLORCVT_MAX = 127
2096 };
2097
2098 CV_Assert( code < 128 );
2099
2100 func_t func = funcs[code];
2101
2102 if (func == 0)
2103 CV_Error(Error::StsBadFlag, "Unknown/unsupported color conversion code");
2104
2105 func(src, dst, dcn, stream);
2106 }
2107
2108 ////////////////////////////////////////////////////////////////////////
2109 // demosaicing
2110
demosaicing(InputArray _src,OutputArray _dst,int code,int dcn,Stream & stream)2111 void cv::cuda::demosaicing(InputArray _src, OutputArray _dst, int code, int dcn, Stream& stream)
2112 {
2113 CV_Assert( !_src.empty() );
2114
2115 switch (code)
2116 {
2117 case cv::COLOR_BayerBG2GRAY: case cv::COLOR_BayerGB2GRAY: case cv::COLOR_BayerRG2GRAY: case cv::COLOR_BayerGR2GRAY:
2118 bayer_to_gray(_src, _dst, code == cv::COLOR_BayerBG2GRAY || code == cv::COLOR_BayerGB2GRAY, code == cv::COLOR_BayerGB2GRAY || code == cv::COLOR_BayerGR2GRAY, stream);
2119 break;
2120
2121 case cv::COLOR_BayerBG2BGR: case cv::COLOR_BayerGB2BGR: case cv::COLOR_BayerRG2BGR: case cv::COLOR_BayerGR2BGR:
2122 bayer_to_BGR(_src, _dst, dcn, code == cv::COLOR_BayerBG2BGR || code == cv::COLOR_BayerGB2BGR, code == cv::COLOR_BayerGB2BGR || code == cv::COLOR_BayerGR2BGR, stream);
2123 break;
2124
2125 case COLOR_BayerBG2BGR_MHT: case COLOR_BayerGB2BGR_MHT: case COLOR_BayerRG2BGR_MHT: case COLOR_BayerGR2BGR_MHT:
2126 {
2127 if (dcn <= 0) dcn = 3;
2128
2129 GpuMat src = _src.getGpuMat();
2130 const int depth = _src.depth();
2131
2132 CV_Assert( depth == CV_8U );
2133 CV_Assert( src.channels() == 1 );
2134 CV_Assert( dcn == 3 || dcn == 4 );
2135
2136 _dst.create(_src.size(), CV_MAKE_TYPE(depth, dcn));
2137 GpuMat dst = _dst.getGpuMat();
2138
2139 dst.setTo(Scalar::all(0), stream);
2140
2141 Size wholeSize;
2142 Point ofs;
2143 src.locateROI(wholeSize, ofs);
2144 PtrStepSzb srcWhole(wholeSize.height, wholeSize.width, src.datastart, src.step);
2145
2146 const int2 firstRed = make_int2(code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGB2BGR_MHT ? 0 : 1,
2147 code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGR2BGR_MHT ? 0 : 1);
2148
2149 if (dcn == 3)
2150 cv::cuda::device::MHCdemosaic<3>(srcWhole, make_int2(ofs.x, ofs.y), dst, firstRed, StreamAccessor::getStream(stream));
2151 else
2152 cv::cuda::device::MHCdemosaic<4>(srcWhole, make_int2(ofs.x, ofs.y), dst, firstRed, StreamAccessor::getStream(stream));
2153
2154 break;
2155 }
2156
2157 case COLOR_BayerBG2GRAY_MHT: case COLOR_BayerGB2GRAY_MHT: case COLOR_BayerRG2GRAY_MHT: case COLOR_BayerGR2GRAY_MHT:
2158 {
2159 GpuMat src = _src.getGpuMat();
2160 const int depth = _src.depth();
2161
2162 CV_Assert( depth == CV_8U );
2163
2164 _dst.create(_src.size(), CV_MAKE_TYPE(depth, 1));
2165 GpuMat dst = _dst.getGpuMat();
2166
2167 dst.setTo(Scalar::all(0), stream);
2168
2169 Size wholeSize;
2170 Point ofs;
2171 src.locateROI(wholeSize, ofs);
2172 PtrStepSzb srcWhole(wholeSize.height, wholeSize.width, src.datastart, src.step);
2173
2174 const int2 firstRed = make_int2(code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGB2BGR_MHT ? 0 : 1,
2175 code == COLOR_BayerRG2BGR_MHT || code == COLOR_BayerGR2BGR_MHT ? 0 : 1);
2176
2177 cv::cuda::device::MHCdemosaic<1>(srcWhole, make_int2(ofs.x, ofs.y), dst, firstRed, StreamAccessor::getStream(stream));
2178
2179 break;
2180 }
2181
2182 default:
2183 CV_Error(Error::StsBadFlag, "Unknown / unsupported color conversion code");
2184 }
2185 }
2186
2187 ////////////////////////////////////////////////////////////////////////
2188 // swapChannels
2189
swapChannels(InputOutputArray _image,const int dstOrder[4],Stream & _stream)2190 void cv::cuda::swapChannels(InputOutputArray _image, const int dstOrder[4], Stream& _stream)
2191 {
2192 GpuMat image = _image.getGpuMat();
2193
2194 CV_Assert( image.type() == CV_8UC4 );
2195
2196 cudaStream_t stream = StreamAccessor::getStream(_stream);
2197 NppStreamHandler h(stream);
2198
2199 NppiSize sz;
2200 sz.width = image.cols;
2201 sz.height = image.rows;
2202
2203 nppSafeCall( nppiSwapChannels_8u_C4IR(image.ptr<Npp8u>(), static_cast<int>(image.step), sz, dstOrder) );
2204
2205 if (stream == 0)
2206 cudaSafeCall( cudaDeviceSynchronize() );
2207 }
2208
2209 ////////////////////////////////////////////////////////////////////////
2210 // gammaCorrection
2211
gammaCorrection(InputArray _src,OutputArray _dst,bool forward,Stream & stream)2212 void cv::cuda::gammaCorrection(InputArray _src, OutputArray _dst, bool forward, Stream& stream)
2213 {
2214 #if (CUDA_VERSION < 5000)
2215 (void) _src;
2216 (void) _dst;
2217 (void) forward;
2218 (void) stream;
2219 CV_Error(Error::StsNotImplemented, "This function works only with CUDA 5.0 or higher");
2220 #else
2221 typedef NppStatus (*func_t)(const Npp8u* pSrc, int nSrcStep, Npp8u* pDst, int nDstStep, NppiSize oSizeROI);
2222 typedef NppStatus (*func_inplace_t)(Npp8u* pSrcDst, int nSrcDstStep, NppiSize oSizeROI);
2223
2224 static const func_t funcs[2][5] =
2225 {
2226 {0, 0, 0, nppiGammaInv_8u_C3R, nppiGammaInv_8u_AC4R},
2227 {0, 0, 0, nppiGammaFwd_8u_C3R, nppiGammaFwd_8u_AC4R}
2228 };
2229 static const func_inplace_t funcs_inplace[2][5] =
2230 {
2231 {0, 0, 0, nppiGammaInv_8u_C3IR, nppiGammaInv_8u_AC4IR},
2232 {0, 0, 0, nppiGammaFwd_8u_C3IR, nppiGammaFwd_8u_AC4IR}
2233 };
2234
2235 GpuMat src = _src.getGpuMat();
2236
2237 CV_Assert( src.type() == CV_8UC3 || src.type() == CV_8UC4 );
2238
2239 _dst.create(src.size(), src.type());
2240 GpuMat dst = _dst.getGpuMat();
2241
2242 NppStreamHandler h(StreamAccessor::getStream(stream));
2243
2244 NppiSize oSizeROI;
2245 oSizeROI.width = src.cols;
2246 oSizeROI.height = src.rows;
2247
2248 if (dst.data == src.data)
2249 funcs_inplace[forward][src.channels()](dst.ptr<Npp8u>(), static_cast<int>(src.step), oSizeROI);
2250 else
2251 funcs[forward][src.channels()](src.ptr<Npp8u>(), static_cast<int>(src.step), dst.ptr<Npp8u>(), static_cast<int>(dst.step), oSizeROI);
2252
2253 #endif
2254 }
2255
2256 ////////////////////////////////////////////////////////////////////////
2257 // alphaComp
2258
2259 namespace
2260 {
2261 template <int DEPTH> struct NppAlphaCompFunc
2262 {
2263 typedef typename NPPTypeTraits<DEPTH>::npp_type npp_t;
2264
2265 typedef NppStatus (*func_t)(const npp_t* pSrc1, int nSrc1Step, const npp_t* pSrc2, int nSrc2Step, npp_t* pDst, int nDstStep, NppiSize oSizeROI, NppiAlphaOp eAlphaOp);
2266 };
2267
2268 template <int DEPTH, typename NppAlphaCompFunc<DEPTH>::func_t func> struct NppAlphaComp
2269 {
2270 typedef typename NPPTypeTraits<DEPTH>::npp_type npp_t;
2271
call__anonb81fffaa0211::NppAlphaComp2272 static void call(const GpuMat& img1, const GpuMat& img2, GpuMat& dst, NppiAlphaOp eAlphaOp, cudaStream_t stream)
2273 {
2274 NppStreamHandler h(stream);
2275
2276 NppiSize oSizeROI;
2277 oSizeROI.width = img1.cols;
2278 oSizeROI.height = img2.rows;
2279
2280 nppSafeCall( func(img1.ptr<npp_t>(), static_cast<int>(img1.step), img2.ptr<npp_t>(), static_cast<int>(img2.step),
2281 dst.ptr<npp_t>(), static_cast<int>(dst.step), oSizeROI, eAlphaOp) );
2282
2283 if (stream == 0)
2284 cudaSafeCall( cudaDeviceSynchronize() );
2285 }
2286 };
2287 }
2288
alphaComp(InputArray _img1,InputArray _img2,OutputArray _dst,int alpha_op,Stream & stream)2289 void cv::cuda::alphaComp(InputArray _img1, InputArray _img2, OutputArray _dst, int alpha_op, Stream& stream)
2290 {
2291 static const NppiAlphaOp npp_alpha_ops[] = {
2292 NPPI_OP_ALPHA_OVER,
2293 NPPI_OP_ALPHA_IN,
2294 NPPI_OP_ALPHA_OUT,
2295 NPPI_OP_ALPHA_ATOP,
2296 NPPI_OP_ALPHA_XOR,
2297 NPPI_OP_ALPHA_PLUS,
2298 NPPI_OP_ALPHA_OVER_PREMUL,
2299 NPPI_OP_ALPHA_IN_PREMUL,
2300 NPPI_OP_ALPHA_OUT_PREMUL,
2301 NPPI_OP_ALPHA_ATOP_PREMUL,
2302 NPPI_OP_ALPHA_XOR_PREMUL,
2303 NPPI_OP_ALPHA_PLUS_PREMUL,
2304 NPPI_OP_ALPHA_PREMUL
2305 };
2306
2307 typedef void (*func_t)(const GpuMat& img1, const GpuMat& img2, GpuMat& dst, NppiAlphaOp eAlphaOp, cudaStream_t stream);
2308 static const func_t funcs[] =
2309 {
2310 NppAlphaComp<CV_8U, nppiAlphaComp_8u_AC4R>::call,
2311 0,
2312 NppAlphaComp<CV_16U, nppiAlphaComp_16u_AC4R>::call,
2313 0,
2314 NppAlphaComp<CV_32S, nppiAlphaComp_32s_AC4R>::call,
2315 NppAlphaComp<CV_32F, nppiAlphaComp_32f_AC4R>::call
2316 };
2317
2318 GpuMat img1 = _img1.getGpuMat();
2319 GpuMat img2 = _img2.getGpuMat();
2320
2321 CV_Assert( img1.type() == CV_8UC4 || img1.type() == CV_16UC4 || img1.type() == CV_32SC4 || img1.type() == CV_32FC4 );
2322 CV_Assert( img1.size() == img2.size() && img1.type() == img2.type() );
2323
2324 _dst.create(img1.size(), img1.type());
2325 GpuMat dst = _dst.getGpuMat();
2326
2327 const func_t func = funcs[img1.depth()];
2328
2329 func(img1, img2, dst, npp_alpha_ops[alpha_op], StreamAccessor::getStream(stream));
2330 }
2331
2332 #endif /* !defined (HAVE_CUDA) */
2333