Home | History | Annotate | Download | only in test
      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 "test_precomp.hpp"
     44 
     45 #ifdef HAVE_CUDA
     46 
     47 using namespace cvtest;
     48 
     49 ///////////////////////////////////////////////////////////////////////////////////////////////////////
     50 // cvtColor
     51 
     52 PARAM_TEST_CASE(CvtColor, cv::cuda::DeviceInfo, cv::Size, MatDepth, UseRoi)
     53 {
     54     cv::cuda::DeviceInfo devInfo;
     55     cv::Size size;
     56     int depth;
     57     bool useRoi;
     58 
     59     cv::Mat img;
     60 
     61     virtual void SetUp()
     62     {
     63         devInfo = GET_PARAM(0);
     64         size = GET_PARAM(1);
     65         depth = GET_PARAM(2);
     66         useRoi = GET_PARAM(3);
     67 
     68         cv::cuda::setDevice(devInfo.deviceID());
     69 
     70         img = randomMat(size, CV_MAKE_TYPE(depth, 3), 0.0, depth == CV_32F ? 1.0 : 255.0);
     71     }
     72 };
     73 
     74 CUDA_TEST_P(CvtColor, BGR2RGB)
     75 {
     76     cv::Mat src = img;
     77 
     78     cv::cuda::GpuMat dst;
     79     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2RGB);
     80 
     81     cv::Mat dst_gold;
     82     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2RGB);
     83 
     84     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
     85 }
     86 
     87 CUDA_TEST_P(CvtColor, BGR2RGBA)
     88 {
     89     cv::Mat src = img;
     90 
     91     cv::cuda::GpuMat dst;
     92     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2RGBA);
     93 
     94     cv::Mat dst_gold;
     95     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2RGBA);
     96 
     97     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
     98 }
     99 
    100 CUDA_TEST_P(CvtColor, BGR2BGRA)
    101 {
    102     cv::Mat src = img;
    103 
    104     cv::cuda::GpuMat dst;
    105     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2BGRA);
    106 
    107     cv::Mat dst_gold;
    108     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2BGRA);
    109 
    110     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    111 }
    112 
    113 CUDA_TEST_P(CvtColor, BGRA2RGB)
    114 {
    115     cv::Mat src;
    116     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    117 
    118     cv::cuda::GpuMat dst;
    119     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGRA2RGB);
    120 
    121     cv::Mat dst_gold;
    122     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2RGB);
    123 
    124     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    125 }
    126 
    127 CUDA_TEST_P(CvtColor, BGRA2BGR)
    128 {
    129     cv::Mat src;
    130     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    131 
    132     cv::cuda::GpuMat dst;
    133     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGRA2BGR);
    134 
    135     cv::Mat dst_gold;
    136     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2BGR);
    137 
    138     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    139 }
    140 
    141 CUDA_TEST_P(CvtColor, BGRA2RGBA)
    142 {
    143     cv::Mat src;
    144     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    145 
    146     cv::cuda::GpuMat dst;
    147     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGRA2RGBA);
    148 
    149     cv::Mat dst_gold;
    150     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2RGBA);
    151 
    152     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    153 }
    154 
    155 CUDA_TEST_P(CvtColor, BGR2GRAY)
    156 {
    157     cv::Mat src = img;
    158 
    159     cv::cuda::GpuMat dst;
    160     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2GRAY);
    161 
    162     cv::Mat dst_gold;
    163     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2GRAY);
    164 
    165     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    166 }
    167 
    168 CUDA_TEST_P(CvtColor, RGB2GRAY)
    169 {
    170     cv::Mat src = img;
    171 
    172     cv::cuda::GpuMat dst;
    173     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2GRAY);
    174 
    175     cv::Mat dst_gold;
    176     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2GRAY);
    177 
    178     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    179 }
    180 
    181 CUDA_TEST_P(CvtColor, GRAY2BGR)
    182 {
    183     cv::Mat src;
    184     cv::cvtColor(img, src, cv::COLOR_BGR2GRAY);
    185 
    186     cv::cuda::GpuMat dst;
    187     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_GRAY2BGR);
    188 
    189     cv::Mat dst_gold;
    190     cv::cvtColor(src, dst_gold, cv::COLOR_GRAY2BGR);
    191 
    192     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    193 }
    194 
    195 CUDA_TEST_P(CvtColor, GRAY2BGRA)
    196 {
    197     cv::Mat src;
    198     cv::cvtColor(img, src, cv::COLOR_BGR2GRAY);
    199 
    200     cv::cuda::GpuMat dst;
    201     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_GRAY2BGRA, 4);
    202 
    203     cv::Mat dst_gold;
    204     cv::cvtColor(src, dst_gold, cv::COLOR_GRAY2BGRA, 4);
    205 
    206     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    207 }
    208 
    209 CUDA_TEST_P(CvtColor, BGRA2GRAY)
    210 {
    211     cv::Mat src;
    212     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    213 
    214     cv::cuda::GpuMat dst;
    215     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGRA2GRAY);
    216 
    217     cv::Mat dst_gold;
    218     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2GRAY);
    219 
    220     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    221 }
    222 
    223 CUDA_TEST_P(CvtColor, RGBA2GRAY)
    224 {
    225     cv::Mat src;
    226     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
    227 
    228     cv::cuda::GpuMat dst;
    229     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGBA2GRAY);
    230 
    231     cv::Mat dst_gold;
    232     cv::cvtColor(src, dst_gold, cv::COLOR_RGBA2GRAY);
    233 
    234     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    235 }
    236 
    237 CUDA_TEST_P(CvtColor, BGR2BGR565)
    238 {
    239     if (depth != CV_8U)
    240         return;
    241 
    242     cv::Mat src = img;
    243 
    244     cv::cuda::GpuMat dst;
    245     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2BGR565);
    246 
    247     cv::Mat dst_gold;
    248     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2BGR565);
    249 
    250     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    251 }
    252 
    253 CUDA_TEST_P(CvtColor, RGB2BGR565)
    254 {
    255     if (depth != CV_8U)
    256         return;
    257 
    258     cv::Mat src = img;
    259 
    260     cv::cuda::GpuMat dst;
    261     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2BGR565);
    262 
    263     cv::Mat dst_gold;
    264     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2BGR565);
    265 
    266     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    267 }
    268 
    269 CUDA_TEST_P(CvtColor, BGR5652BGR)
    270 {
    271     if (depth != CV_8U)
    272         return;
    273 
    274     cv::Mat src;
    275     cv::cvtColor(img, src, cv::COLOR_BGR2BGR565);
    276 
    277     cv::cuda::GpuMat dst;
    278     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5652BGR);
    279 
    280     cv::Mat dst_gold;
    281     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5652BGR);
    282 
    283     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    284 }
    285 
    286 CUDA_TEST_P(CvtColor, BGR5652RGB)
    287 {
    288     if (depth != CV_8U)
    289         return;
    290 
    291     cv::Mat src;
    292     cv::cvtColor(img, src, cv::COLOR_BGR2BGR565);
    293 
    294     cv::cuda::GpuMat dst;
    295     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5652RGB);
    296 
    297     cv::Mat dst_gold;
    298     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5652RGB);
    299 
    300     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    301 }
    302 
    303 CUDA_TEST_P(CvtColor, BGRA2BGR565)
    304 {
    305     if (depth != CV_8U)
    306         return;
    307 
    308     cv::Mat src;
    309     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    310 
    311     cv::cuda::GpuMat dst;
    312     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGRA2BGR565);
    313 
    314     cv::Mat dst_gold;
    315     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2BGR565);
    316 
    317     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    318 }
    319 
    320 CUDA_TEST_P(CvtColor, RGBA2BGR565)
    321 {
    322     if (depth != CV_8U)
    323         return;
    324 
    325     cv::Mat src;
    326     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
    327 
    328     cv::cuda::GpuMat dst;
    329     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGBA2BGR565);
    330 
    331     cv::Mat dst_gold;
    332     cv::cvtColor(src, dst_gold, cv::COLOR_RGBA2BGR565);
    333 
    334     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    335 }
    336 
    337 CUDA_TEST_P(CvtColor, BGR5652BGRA)
    338 {
    339     if (depth != CV_8U)
    340         return;
    341 
    342     cv::Mat src;
    343     cv::cvtColor(img, src, cv::COLOR_BGR2BGR565);
    344 
    345     cv::cuda::GpuMat dst;
    346     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5652BGRA, 4);
    347 
    348     cv::Mat dst_gold;
    349     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5652BGRA, 4);
    350 
    351     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    352 }
    353 
    354 CUDA_TEST_P(CvtColor, BGR5652RGBA)
    355 {
    356     if (depth != CV_8U)
    357         return;
    358 
    359     cv::Mat src;
    360     cv::cvtColor(img, src, cv::COLOR_BGR2BGR565);
    361 
    362     cv::cuda::GpuMat dst;
    363     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5652RGBA, 4);
    364 
    365     cv::Mat dst_gold;
    366     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5652RGBA, 4);
    367 
    368     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    369 }
    370 
    371 CUDA_TEST_P(CvtColor, GRAY2BGR565)
    372 {
    373     if (depth != CV_8U)
    374         return;
    375 
    376     cv::Mat src;
    377     cv::cvtColor(img, src, cv::COLOR_BGR2GRAY);
    378 
    379     cv::cuda::GpuMat dst;
    380     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_GRAY2BGR565);
    381 
    382     cv::Mat dst_gold;
    383     cv::cvtColor(src, dst_gold, cv::COLOR_GRAY2BGR565);
    384 
    385     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    386 }
    387 
    388 CUDA_TEST_P(CvtColor, BGR5652GRAY)
    389 {
    390     if (depth != CV_8U)
    391         return;
    392 
    393     cv::Mat src;
    394     cv::cvtColor(img, src, cv::COLOR_BGR2BGR565);
    395 
    396     cv::cuda::GpuMat dst;
    397     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5652GRAY);
    398 
    399     cv::Mat dst_gold;
    400     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5652GRAY);
    401 
    402     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    403 }
    404 
    405 CUDA_TEST_P(CvtColor, BGR2BGR555)
    406 {
    407     if (depth != CV_8U)
    408         return;
    409 
    410     cv::Mat src = img;
    411 
    412     cv::cuda::GpuMat dst;
    413     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2BGR555);
    414 
    415     cv::Mat dst_gold;
    416     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2BGR555);
    417 
    418     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    419 }
    420 
    421 CUDA_TEST_P(CvtColor, RGB2BGR555)
    422 {
    423     if (depth != CV_8U)
    424         return;
    425 
    426     cv::Mat src = img;
    427 
    428     cv::cuda::GpuMat dst;
    429     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2BGR555);
    430 
    431     cv::Mat dst_gold;
    432     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2BGR555);
    433 
    434     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    435 }
    436 
    437 CUDA_TEST_P(CvtColor, BGR5552BGR)
    438 {
    439     if (depth != CV_8U)
    440         return;
    441 
    442     cv::Mat src;
    443     cv::cvtColor(img, src, cv::COLOR_BGR2BGR555);
    444 
    445     cv::cuda::GpuMat dst;
    446     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5552BGR);
    447 
    448     cv::Mat dst_gold;
    449     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5552BGR);
    450 
    451     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    452 }
    453 
    454 CUDA_TEST_P(CvtColor, BGR5552RGB)
    455 {
    456     if (depth != CV_8U)
    457         return;
    458 
    459     cv::Mat src;
    460     cv::cvtColor(img, src, cv::COLOR_BGR2BGR555);
    461 
    462     cv::cuda::GpuMat dst;
    463     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5552RGB);
    464 
    465     cv::Mat dst_gold;
    466     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5552RGB);
    467 
    468     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    469 }
    470 
    471 CUDA_TEST_P(CvtColor, BGRA2BGR555)
    472 {
    473     if (depth != CV_8U)
    474         return;
    475 
    476     cv::Mat src;
    477     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    478 
    479     cv::cuda::GpuMat dst;
    480     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGRA2BGR555);
    481 
    482     cv::Mat dst_gold;
    483     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2BGR555);
    484 
    485     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    486 }
    487 
    488 CUDA_TEST_P(CvtColor, RGBA2BGR555)
    489 {
    490     if (depth != CV_8U)
    491         return;
    492 
    493     cv::Mat src;
    494     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
    495 
    496     cv::cuda::GpuMat dst;
    497     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGBA2BGR555);
    498 
    499     cv::Mat dst_gold;
    500     cv::cvtColor(src, dst_gold, cv::COLOR_RGBA2BGR555);
    501 
    502     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    503 }
    504 
    505 CUDA_TEST_P(CvtColor, BGR5552BGRA)
    506 {
    507     if (depth != CV_8U)
    508         return;
    509 
    510     cv::Mat src;
    511     cv::cvtColor(img, src, cv::COLOR_BGR2BGR555);
    512 
    513     cv::cuda::GpuMat dst;
    514     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5552BGRA, 4);
    515 
    516     cv::Mat dst_gold;
    517     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5552BGRA, 4);
    518 
    519     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    520 }
    521 
    522 CUDA_TEST_P(CvtColor, BGR5552RGBA)
    523 {
    524     if (depth != CV_8U)
    525         return;
    526 
    527     cv::Mat src;
    528     cv::cvtColor(img, src, cv::COLOR_BGR2BGR555);
    529 
    530     cv::cuda::GpuMat dst;
    531     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5552RGBA, 4);
    532 
    533     cv::Mat dst_gold;
    534     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5552RGBA, 4);
    535 
    536     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    537 }
    538 
    539 CUDA_TEST_P(CvtColor, GRAY2BGR555)
    540 {
    541     if (depth != CV_8U)
    542         return;
    543 
    544     cv::Mat src;
    545     cv::cvtColor(img, src, cv::COLOR_BGR2GRAY);
    546 
    547     cv::cuda::GpuMat dst;
    548     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_GRAY2BGR555);
    549 
    550     cv::Mat dst_gold;
    551     cv::cvtColor(src, dst_gold, cv::COLOR_GRAY2BGR555);
    552 
    553     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    554 }
    555 
    556 CUDA_TEST_P(CvtColor, BGR5552GRAY)
    557 {
    558     if (depth != CV_8U)
    559         return;
    560 
    561     cv::Mat src;
    562     cv::cvtColor(img, src, cv::COLOR_BGR2BGR555);
    563 
    564     cv::cuda::GpuMat dst;
    565     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR5552GRAY);
    566 
    567     cv::Mat dst_gold;
    568     cv::cvtColor(src, dst_gold, cv::COLOR_BGR5552GRAY);
    569 
    570     EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
    571 }
    572 
    573 CUDA_TEST_P(CvtColor, BGR2XYZ)
    574 {
    575     cv::Mat src = img;
    576 
    577     cv::cuda::GpuMat dst;
    578     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2XYZ);
    579 
    580     cv::Mat dst_gold;
    581     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2XYZ);
    582 
    583     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    584 }
    585 
    586 CUDA_TEST_P(CvtColor, RGB2XYZ)
    587 {
    588     cv::Mat src = img;
    589 
    590     cv::cuda::GpuMat dst;
    591     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2XYZ);
    592 
    593     cv::Mat dst_gold;
    594     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2XYZ);
    595 
    596     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    597 }
    598 
    599 CUDA_TEST_P(CvtColor, BGR2XYZ4)
    600 {
    601     cv::Mat src = img;
    602 
    603     cv::cuda::GpuMat dst;
    604     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2XYZ, 4);
    605 
    606     ASSERT_EQ(4, dst.channels());
    607 
    608     cv::Mat dst_gold;
    609     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2XYZ);
    610 
    611     cv::Mat h_dst(dst);
    612 
    613     cv::Mat channels[4];
    614     cv::split(h_dst, channels);
    615     cv::merge(channels, 3, h_dst);
    616 
    617     EXPECT_MAT_NEAR(dst_gold, h_dst, 1e-5);
    618 }
    619 
    620 CUDA_TEST_P(CvtColor, BGRA2XYZ4)
    621 {
    622     cv::Mat src;
    623     cv::cvtColor(img, src, cv::COLOR_BGR2BGRA);
    624 
    625     cv::cuda::GpuMat dst;
    626     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2XYZ, 4);
    627 
    628     ASSERT_EQ(4, dst.channels());
    629 
    630     cv::Mat dst_gold;
    631     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2XYZ);
    632 
    633     cv::Mat h_dst(dst);
    634 
    635     cv::Mat channels[4];
    636     cv::split(h_dst, channels);
    637     cv::merge(channels, 3, h_dst);
    638 
    639     EXPECT_MAT_NEAR(dst_gold, h_dst, 1e-5);
    640 }
    641 
    642 CUDA_TEST_P(CvtColor, XYZ2BGR)
    643 {
    644     cv::Mat src;
    645     cv::cvtColor(img, src, cv::COLOR_BGR2XYZ);
    646 
    647     cv::cuda::GpuMat dst;
    648     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_XYZ2BGR);
    649 
    650     cv::Mat dst_gold;
    651     cv::cvtColor(src, dst_gold, cv::COLOR_XYZ2BGR);
    652 
    653     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    654 }
    655 
    656 CUDA_TEST_P(CvtColor, XYZ2RGB)
    657 {
    658     cv::Mat src;
    659     cv::cvtColor(img, src, cv::COLOR_BGR2XYZ);
    660 
    661     cv::cuda::GpuMat dst;
    662     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_XYZ2RGB);
    663 
    664     cv::Mat dst_gold;
    665     cv::cvtColor(src, dst_gold, cv::COLOR_XYZ2RGB);
    666 
    667     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    668 }
    669 
    670 CUDA_TEST_P(CvtColor, XYZ42BGR)
    671 {
    672     cv::Mat src;
    673     cv::cvtColor(img, src, cv::COLOR_BGR2XYZ);
    674 
    675     cv::Mat dst_gold;
    676     cv::cvtColor(src, dst_gold, cv::COLOR_XYZ2BGR);
    677 
    678     cv::Mat channels[4];
    679     cv::split(src, channels);
    680     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
    681     cv::merge(channels, 4, src);
    682 
    683     cv::cuda::GpuMat dst;
    684     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_XYZ2BGR);
    685 
    686     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    687 }
    688 
    689 CUDA_TEST_P(CvtColor, XYZ42BGRA)
    690 {
    691     cv::Mat src;
    692     cv::cvtColor(img, src, cv::COLOR_BGR2XYZ);
    693 
    694     cv::Mat dst_gold;
    695     cv::cvtColor(src, dst_gold, cv::COLOR_XYZ2BGR, 4);
    696 
    697     cv::Mat channels[4];
    698     cv::split(src, channels);
    699     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
    700     cv::merge(channels, 4, src);
    701 
    702     cv::cuda::GpuMat dst;
    703     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_XYZ2BGR, 4);
    704 
    705     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    706 }
    707 
    708 CUDA_TEST_P(CvtColor, BGR2YCrCb)
    709 {
    710     cv::Mat src = img;
    711 
    712     cv::cuda::GpuMat dst;
    713     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2YCrCb);
    714 
    715     cv::Mat dst_gold;
    716     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YCrCb);
    717 
    718     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
    719 }
    720 
    721 CUDA_TEST_P(CvtColor, RGB2YCrCb)
    722 {
    723     cv::Mat src = img;
    724 
    725     cv::cuda::GpuMat dst;
    726     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2YCrCb);
    727 
    728     cv::Mat dst_gold;
    729     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2YCrCb);
    730 
    731     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
    732 }
    733 
    734 CUDA_TEST_P(CvtColor, BGR2YCrCb4)
    735 {
    736     cv::Mat src = img;
    737 
    738     cv::cuda::GpuMat dst;
    739     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2YCrCb, 4);
    740 
    741     ASSERT_EQ(4, dst.channels());
    742 
    743     cv::Mat dst_gold;
    744     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YCrCb);
    745 
    746     cv::Mat h_dst(dst);
    747 
    748     cv::Mat channels[4];
    749     cv::split(h_dst, channels);
    750     cv::merge(channels, 3, h_dst);
    751 
    752     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
    753 }
    754 
    755 CUDA_TEST_P(CvtColor, RGBA2YCrCb4)
    756 {
    757     cv::Mat src;
    758     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
    759 
    760     cv::cuda::GpuMat dst;
    761     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2YCrCb, 4);
    762 
    763     ASSERT_EQ(4, dst.channels());
    764 
    765     cv::Mat dst_gold;
    766     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YCrCb);
    767 
    768     cv::Mat h_dst(dst);
    769 
    770     cv::Mat channels[4];
    771     cv::split(h_dst, channels);
    772     cv::merge(channels, 3, h_dst);
    773 
    774     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
    775 }
    776 
    777 CUDA_TEST_P(CvtColor, YCrCb2BGR)
    778 {
    779     cv::Mat src;
    780     cv::cvtColor(img, src, cv::COLOR_BGR2YCrCb);
    781 
    782     cv::cuda::GpuMat dst;
    783     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YCrCb2BGR);
    784 
    785     cv::Mat dst_gold;
    786     cv::cvtColor(src, dst_gold, cv::COLOR_YCrCb2BGR);
    787 
    788     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    789 }
    790 
    791 CUDA_TEST_P(CvtColor, YCrCb2RGB)
    792 {
    793     cv::Mat src;
    794     cv::cvtColor(img, src, cv::COLOR_BGR2YCrCb);
    795 
    796     cv::cuda::GpuMat dst;
    797     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YCrCb2RGB);
    798 
    799     cv::Mat dst_gold;
    800     cv::cvtColor(src, dst_gold, cv::COLOR_YCrCb2RGB);
    801 
    802     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    803 }
    804 
    805 CUDA_TEST_P(CvtColor, YCrCb42RGB)
    806 {
    807     cv::Mat src;
    808     cv::cvtColor(img, src, cv::COLOR_BGR2YCrCb);
    809 
    810     cv::Mat dst_gold;
    811     cv::cvtColor(src, dst_gold, cv::COLOR_YCrCb2RGB);
    812 
    813     cv::Mat channels[4];
    814     cv::split(src, channels);
    815     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
    816     cv::merge(channels, 4, src);
    817 
    818     cv::cuda::GpuMat dst;
    819     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YCrCb2RGB);
    820 
    821     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    822 }
    823 
    824 CUDA_TEST_P(CvtColor, YCrCb42RGBA)
    825 {
    826     cv::Mat src;
    827     cv::cvtColor(img, src, cv::COLOR_BGR2YCrCb);
    828 
    829     cv::Mat dst_gold;
    830     cv::cvtColor(src, dst_gold, cv::COLOR_YCrCb2RGB, 4);
    831 
    832     cv::Mat channels[4];
    833     cv::split(src, channels);
    834     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
    835     cv::merge(channels, 4, src);
    836 
    837     cv::cuda::GpuMat dst;
    838     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YCrCb2RGB, 4);
    839 
    840     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
    841 }
    842 
    843 CUDA_TEST_P(CvtColor, BGR2HSV)
    844 {
    845     if (depth == CV_16U)
    846         return;
    847 
    848     cv::Mat src = img;
    849 
    850     cv::cuda::GpuMat dst;
    851     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2HSV);
    852 
    853     cv::Mat dst_gold;
    854     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2HSV);
    855 
    856     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
    857 }
    858 
    859 CUDA_TEST_P(CvtColor, RGB2HSV)
    860 {
    861     if (depth == CV_16U)
    862         return;
    863 
    864     cv::Mat src = img;
    865 
    866     cv::cuda::GpuMat dst;
    867     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HSV);
    868 
    869     cv::Mat dst_gold;
    870     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HSV);
    871 
    872     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
    873 }
    874 
    875 CUDA_TEST_P(CvtColor, RGB2HSV4)
    876 {
    877     if (depth == CV_16U)
    878         return;
    879 
    880     cv::Mat src = img;
    881 
    882     cv::cuda::GpuMat dst;
    883     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HSV, 4);
    884 
    885     ASSERT_EQ(4, dst.channels());
    886 
    887     cv::Mat dst_gold;
    888     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HSV);
    889 
    890     cv::Mat h_dst(dst);
    891 
    892     cv::Mat channels[4];
    893     cv::split(h_dst, channels);
    894     cv::merge(channels, 3, h_dst);
    895 
    896     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
    897 }
    898 
    899 CUDA_TEST_P(CvtColor, RGBA2HSV4)
    900 {
    901     if (depth == CV_16U)
    902         return;
    903 
    904     cv::Mat src;
    905     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
    906 
    907     cv::cuda::GpuMat dst;
    908     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HSV, 4);
    909 
    910     ASSERT_EQ(4, dst.channels());
    911 
    912     cv::Mat dst_gold;
    913     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HSV);
    914 
    915     cv::Mat h_dst(dst);
    916 
    917     cv::Mat channels[4];
    918     cv::split(h_dst, channels);
    919     cv::merge(channels, 3, h_dst);
    920 
    921     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
    922 }
    923 
    924 CUDA_TEST_P(CvtColor, BGR2HLS)
    925 {
    926     if (depth == CV_16U)
    927         return;
    928 
    929     cv::Mat src = img;
    930 
    931     cv::cuda::GpuMat dst;
    932     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2HLS);
    933 
    934     cv::Mat dst_gold;
    935     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2HLS);
    936 
    937     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
    938 }
    939 
    940 CUDA_TEST_P(CvtColor, RGB2HLS)
    941 {
    942     if (depth == CV_16U)
    943         return;
    944 
    945     cv::Mat src = img;
    946 
    947     cv::cuda::GpuMat dst;
    948     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HLS);
    949 
    950     cv::Mat dst_gold;
    951     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HLS);
    952 
    953     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
    954 }
    955 
    956 CUDA_TEST_P(CvtColor, RGB2HLS4)
    957 {
    958     if (depth == CV_16U)
    959         return;
    960 
    961     cv::Mat src = img;
    962 
    963     cv::cuda::GpuMat dst;
    964     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HLS, 4);
    965 
    966     ASSERT_EQ(4, dst.channels());
    967 
    968     cv::Mat dst_gold;
    969     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HLS);
    970 
    971     cv::Mat h_dst(dst);
    972 
    973     cv::Mat channels[4];
    974     cv::split(h_dst, channels);
    975     cv::merge(channels, 3, h_dst);
    976 
    977     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
    978 }
    979 
    980 CUDA_TEST_P(CvtColor, RGBA2HLS4)
    981 {
    982     if (depth == CV_16U)
    983         return;
    984 
    985     cv::Mat src;
    986     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
    987 
    988     cv::cuda::GpuMat dst;
    989     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HLS, 4);
    990 
    991     ASSERT_EQ(4, dst.channels());
    992 
    993     cv::Mat dst_gold;
    994     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HLS);
    995 
    996     cv::Mat h_dst(dst);
    997 
    998     cv::Mat channels[4];
    999     cv::split(h_dst, channels);
   1000     cv::merge(channels, 3, h_dst);
   1001 
   1002     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
   1003 }
   1004 
   1005 CUDA_TEST_P(CvtColor, HSV2BGR)
   1006 {
   1007     if (depth == CV_16U)
   1008         return;
   1009 
   1010     cv::Mat src;
   1011     cv::cvtColor(img, src, cv::COLOR_BGR2HSV);
   1012 
   1013     cv::cuda::GpuMat dst;
   1014     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2BGR);
   1015 
   1016     cv::Mat dst_gold;
   1017     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2BGR);
   1018 
   1019     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1020 }
   1021 
   1022 CUDA_TEST_P(CvtColor, HSV2RGB)
   1023 {
   1024     if (depth == CV_16U)
   1025         return;
   1026 
   1027     cv::Mat src;
   1028     cv::cvtColor(img, src, cv::COLOR_BGR2HSV);
   1029 
   1030     cv::cuda::GpuMat dst;
   1031     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2RGB);
   1032 
   1033     cv::Mat dst_gold;
   1034     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2RGB);
   1035 
   1036     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1037 }
   1038 
   1039 CUDA_TEST_P(CvtColor, HSV42BGR)
   1040 {
   1041     if (depth == CV_16U)
   1042         return;
   1043 
   1044     cv::Mat src;
   1045     cv::cvtColor(img, src, cv::COLOR_BGR2HSV);
   1046 
   1047     cv::Mat dst_gold;
   1048     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2BGR);
   1049 
   1050     cv::Mat channels[4];
   1051     cv::split(src, channels);
   1052     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1053     cv::merge(channels, 4, src);
   1054 
   1055     cv::cuda::GpuMat dst;
   1056     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2BGR);
   1057 
   1058     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1059 }
   1060 
   1061 CUDA_TEST_P(CvtColor, HSV42BGRA)
   1062 {
   1063     if (depth == CV_16U)
   1064         return;
   1065 
   1066     cv::Mat src;
   1067     cv::cvtColor(img, src, cv::COLOR_BGR2HSV);
   1068 
   1069     cv::Mat dst_gold;
   1070     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2BGR, 4);
   1071 
   1072     cv::Mat channels[4];
   1073     cv::split(src, channels);
   1074     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1075     cv::merge(channels, 4, src);
   1076 
   1077     cv::cuda::GpuMat dst;
   1078     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2BGR, 4);
   1079 
   1080     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1081 }
   1082 
   1083 CUDA_TEST_P(CvtColor, HLS2BGR)
   1084 {
   1085     if (depth == CV_16U)
   1086         return;
   1087 
   1088     cv::Mat src;
   1089     cv::cvtColor(img, src, cv::COLOR_BGR2HLS);
   1090 
   1091     cv::cuda::GpuMat dst;
   1092     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2BGR);
   1093 
   1094     cv::Mat dst_gold;
   1095     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2BGR);
   1096 
   1097     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1098 }
   1099 
   1100 CUDA_TEST_P(CvtColor, HLS2RGB)
   1101 {
   1102     if (depth == CV_16U)
   1103         return;
   1104 
   1105     cv::Mat src;
   1106     cv::cvtColor(img, src, cv::COLOR_BGR2HLS);
   1107 
   1108     cv::cuda::GpuMat dst;
   1109     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2RGB);
   1110 
   1111     cv::Mat dst_gold;
   1112     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2RGB);
   1113 
   1114     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1115 }
   1116 
   1117 CUDA_TEST_P(CvtColor, HLS42RGB)
   1118 {
   1119     if (depth == CV_16U)
   1120         return;
   1121 
   1122     cv::Mat src;
   1123     cv::cvtColor(img, src, cv::COLOR_BGR2HLS);
   1124 
   1125     cv::Mat dst_gold;
   1126     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2RGB);
   1127 
   1128     cv::Mat channels[4];
   1129     cv::split(src, channels);
   1130     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1131     cv::merge(channels, 4, src);
   1132 
   1133     cv::cuda::GpuMat dst;
   1134     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2RGB);
   1135 
   1136     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1137 }
   1138 
   1139 CUDA_TEST_P(CvtColor, HLS42RGBA)
   1140 {
   1141     if (depth == CV_16U)
   1142         return;
   1143 
   1144     cv::Mat src;
   1145     cv::cvtColor(img, src, cv::COLOR_BGR2HLS);
   1146 
   1147     cv::Mat dst_gold;
   1148     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2RGB, 4);
   1149 
   1150     cv::Mat channels[4];
   1151     cv::split(src, channels);
   1152     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1153     cv::merge(channels, 4, src);
   1154 
   1155 
   1156     cv::cuda::GpuMat dst;
   1157     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2RGB, 4);
   1158 
   1159     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1160 }
   1161 
   1162 CUDA_TEST_P(CvtColor, BGR2HSV_FULL)
   1163 {
   1164     if (depth == CV_16U)
   1165         return;
   1166 
   1167     cv::Mat src = img;
   1168 
   1169     cv::cuda::GpuMat dst;
   1170     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2HSV_FULL);
   1171 
   1172     cv::Mat dst_gold;
   1173     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2HSV_FULL);
   1174 
   1175     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1176 }
   1177 
   1178 CUDA_TEST_P(CvtColor, RGB2HSV_FULL)
   1179 {
   1180     if (depth == CV_16U)
   1181         return;
   1182 
   1183     cv::Mat src = img;
   1184 
   1185     cv::cuda::GpuMat dst;
   1186     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HSV_FULL);
   1187 
   1188     cv::Mat dst_gold;
   1189     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HSV_FULL);
   1190 
   1191     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1192 }
   1193 
   1194 CUDA_TEST_P(CvtColor, RGB2HSV4_FULL)
   1195 {
   1196     if (depth == CV_16U)
   1197         return;
   1198 
   1199     cv::Mat src = img;
   1200 
   1201     cv::cuda::GpuMat dst;
   1202     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HSV_FULL, 4);
   1203 
   1204     ASSERT_EQ(4, dst.channels());
   1205 
   1206     cv::Mat dst_gold;
   1207     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HSV_FULL);
   1208 
   1209     cv::Mat h_dst(dst);
   1210 
   1211     cv::Mat channels[4];
   1212     cv::split(h_dst, channels);
   1213     cv::merge(channels, 3, h_dst);
   1214 
   1215     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
   1216 }
   1217 
   1218 CUDA_TEST_P(CvtColor, RGBA2HSV4_FULL)
   1219 {
   1220     if (depth == CV_16U)
   1221         return;
   1222 
   1223     cv::Mat src;
   1224     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1225 
   1226     cv::cuda::GpuMat dst;
   1227     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HSV_FULL, 4);
   1228 
   1229     ASSERT_EQ(4, dst.channels());
   1230 
   1231     cv::Mat dst_gold;
   1232     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HSV_FULL);
   1233 
   1234     cv::Mat h_dst(dst);
   1235 
   1236     cv::Mat channels[4];
   1237     cv::split(h_dst, channels);
   1238     cv::merge(channels, 3, h_dst);
   1239 
   1240     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
   1241 }
   1242 
   1243 CUDA_TEST_P(CvtColor, BGR2HLS_FULL)
   1244 {
   1245     if (depth == CV_16U)
   1246         return;
   1247 
   1248     cv::Mat src = img;
   1249 
   1250     cv::cuda::GpuMat dst;
   1251     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2HLS_FULL);
   1252 
   1253     cv::Mat dst_gold;
   1254     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2HLS_FULL);
   1255 
   1256     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1257 }
   1258 
   1259 CUDA_TEST_P(CvtColor, RGB2HLS_FULL)
   1260 {
   1261     if (depth == CV_16U)
   1262         return;
   1263 
   1264     cv::Mat src = img;
   1265 
   1266     cv::cuda::GpuMat dst;
   1267     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HLS_FULL);
   1268 
   1269     cv::Mat dst_gold;
   1270     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HLS_FULL);
   1271 
   1272     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1273 }
   1274 
   1275 CUDA_TEST_P(CvtColor, RGB2HLS4_FULL)
   1276 {
   1277     if (depth == CV_16U)
   1278         return;
   1279 
   1280     cv::Mat src = img;
   1281 
   1282     cv::cuda::GpuMat dst;
   1283     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HLS_FULL, 4);
   1284 
   1285     ASSERT_EQ(4, dst.channels());
   1286 
   1287     cv::Mat dst_gold;
   1288     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HLS_FULL);
   1289 
   1290     cv::Mat h_dst(dst);
   1291 
   1292     cv::Mat channels[4];
   1293     cv::split(h_dst, channels);
   1294     cv::merge(channels, 3, h_dst);
   1295 
   1296     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
   1297 }
   1298 
   1299 CUDA_TEST_P(CvtColor, RGBA2HLS4_FULL)
   1300 {
   1301     if (depth == CV_16U)
   1302         return;
   1303 
   1304     cv::Mat src;
   1305     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1306 
   1307     cv::cuda::GpuMat dst;
   1308     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2HLS_FULL, 4);
   1309 
   1310     ASSERT_EQ(4, dst.channels());
   1311 
   1312     cv::Mat dst_gold;
   1313     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2HLS_FULL);
   1314 
   1315     cv::Mat h_dst(dst);
   1316 
   1317     cv::Mat channels[4];
   1318     cv::split(h_dst, channels);
   1319     cv::merge(channels, 3, h_dst);
   1320 
   1321     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_32F ? 1e-2 : 1);
   1322 }
   1323 
   1324 CUDA_TEST_P(CvtColor, HSV2BGR_FULL)
   1325 {
   1326     if (depth == CV_16U)
   1327         return;
   1328 
   1329     cv::Mat src;
   1330     cv::cvtColor(img, src, cv::COLOR_BGR2HSV_FULL);
   1331 
   1332     cv::cuda::GpuMat dst;
   1333     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2BGR_FULL);
   1334 
   1335     cv::Mat dst_gold;
   1336     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2BGR_FULL);
   1337 
   1338     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1339 }
   1340 
   1341 CUDA_TEST_P(CvtColor, HSV2RGB_FULL)
   1342 {
   1343     if (depth == CV_16U)
   1344         return;
   1345 
   1346     cv::Mat src;
   1347     cv::cvtColor(img, src, cv::COLOR_BGR2HSV_FULL);
   1348 
   1349     cv::cuda::GpuMat dst;
   1350     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2RGB_FULL);
   1351 
   1352     cv::Mat dst_gold;
   1353     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2RGB_FULL);
   1354 
   1355     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1356 }
   1357 
   1358 CUDA_TEST_P(CvtColor, HSV42RGB_FULL)
   1359 {
   1360     if (depth == CV_16U)
   1361         return;
   1362 
   1363     cv::Mat src;
   1364     cv::cvtColor(img, src, cv::COLOR_BGR2HSV_FULL);
   1365 
   1366     cv::Mat dst_gold;
   1367     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2RGB_FULL);
   1368 
   1369     cv::Mat channels[4];
   1370     cv::split(src, channels);
   1371     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1372     cv::merge(channels, 4, src);
   1373 
   1374     cv::cuda::GpuMat dst;
   1375     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2RGB_FULL);
   1376 
   1377     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1378 }
   1379 
   1380 CUDA_TEST_P(CvtColor, HSV42RGBA_FULL)
   1381 {
   1382     if (depth == CV_16U)
   1383         return;
   1384 
   1385     cv::Mat src;
   1386     cv::cvtColor(img, src, cv::COLOR_BGR2HSV_FULL);
   1387 
   1388     cv::Mat dst_gold;
   1389     cv::cvtColor(src, dst_gold, cv::COLOR_HSV2RGB_FULL, 4);
   1390 
   1391     cv::Mat channels[4];
   1392     cv::split(src, channels);
   1393     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1394     cv::merge(channels, 4, src);
   1395 
   1396     cv::cuda::GpuMat dst;
   1397     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HSV2RGB_FULL, 4);
   1398 
   1399     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1400 }
   1401 
   1402 CUDA_TEST_P(CvtColor, HLS2BGR_FULL)
   1403 {
   1404     if (depth == CV_16U)
   1405         return;
   1406 
   1407     cv::Mat src;
   1408     cv::cvtColor(img, src, cv::COLOR_BGR2HLS_FULL);
   1409 
   1410     cv::cuda::GpuMat dst;
   1411     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2BGR_FULL);
   1412 
   1413     cv::Mat dst_gold;
   1414     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2BGR_FULL);
   1415 
   1416     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1417 }
   1418 
   1419 CUDA_TEST_P(CvtColor, HLS2RGB_FULL)
   1420 {
   1421     if (depth == CV_16U)
   1422         return;
   1423 
   1424     cv::Mat src;
   1425     cv::cvtColor(img, src, cv::COLOR_BGR2HLS_FULL);
   1426 
   1427     cv::cuda::GpuMat dst;
   1428     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2RGB_FULL);
   1429 
   1430     cv::Mat dst_gold;
   1431     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2RGB_FULL);
   1432 
   1433     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1434 }
   1435 
   1436 CUDA_TEST_P(CvtColor, HLS42RGB_FULL)
   1437 {
   1438     if (depth == CV_16U)
   1439         return;
   1440 
   1441     cv::Mat src;
   1442     cv::cvtColor(img, src, cv::COLOR_BGR2HLS_FULL);
   1443 
   1444     cv::Mat dst_gold;
   1445     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2RGB_FULL);
   1446 
   1447     cv::Mat channels[4];
   1448     cv::split(src, channels);
   1449     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1450     cv::merge(channels, 4, src);
   1451 
   1452     cv::cuda::GpuMat dst;
   1453     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2RGB_FULL);
   1454 
   1455     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1456 }
   1457 
   1458 CUDA_TEST_P(CvtColor, HLS42RGBA_FULL)
   1459 {
   1460     if (depth == CV_16U)
   1461         return;
   1462 
   1463     cv::Mat src;
   1464     cv::cvtColor(img, src, cv::COLOR_BGR2HLS_FULL);
   1465 
   1466     cv::Mat dst_gold;
   1467     cv::cvtColor(src, dst_gold, cv::COLOR_HLS2RGB_FULL, 4);
   1468 
   1469     cv::Mat channels[4];
   1470     cv::split(src, channels);
   1471     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1472     cv::merge(channels, 4, src);
   1473 
   1474     cv::cuda::GpuMat dst;
   1475     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_HLS2RGB_FULL, 4);
   1476 
   1477     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_32F ? 1e-2 : 1);
   1478 }
   1479 
   1480 CUDA_TEST_P(CvtColor, BGR2YUV)
   1481 {
   1482     cv::Mat src = img;
   1483 
   1484     cv::cuda::GpuMat dst;
   1485     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2YUV);
   1486 
   1487     cv::Mat dst_gold;
   1488     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YUV);
   1489 
   1490     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
   1491 }
   1492 
   1493 CUDA_TEST_P(CvtColor, RGB2YUV)
   1494 {
   1495     cv::Mat src = img;
   1496 
   1497     cv::cuda::GpuMat dst;
   1498     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2YUV);
   1499 
   1500     cv::Mat dst_gold;
   1501     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2YUV);
   1502 
   1503     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
   1504 }
   1505 
   1506 CUDA_TEST_P(CvtColor, YUV2BGR)
   1507 {
   1508     cv::Mat src;
   1509     cv::cvtColor(img, src, cv::COLOR_BGR2YUV);
   1510 
   1511     cv::cuda::GpuMat dst;
   1512     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YUV2BGR);
   1513 
   1514     cv::Mat dst_gold;
   1515     cv::cvtColor(src, dst_gold, cv::COLOR_YUV2BGR);
   1516 
   1517     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
   1518 }
   1519 
   1520 CUDA_TEST_P(CvtColor, YUV42BGR)
   1521 {
   1522     cv::Mat src;
   1523     cv::cvtColor(img, src, cv::COLOR_BGR2YUV);
   1524 
   1525     cv::Mat dst_gold;
   1526     cv::cvtColor(src, dst_gold, cv::COLOR_YUV2BGR);
   1527 
   1528     cv::Mat channels[4];
   1529     cv::split(src, channels);
   1530     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1531     cv::merge(channels, 4, src);
   1532 
   1533     cv::cuda::GpuMat dst;
   1534     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YUV2BGR);
   1535 
   1536     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
   1537 }
   1538 
   1539 CUDA_TEST_P(CvtColor, YUV42BGRA)
   1540 {
   1541     cv::Mat src;
   1542     cv::cvtColor(img, src, cv::COLOR_BGR2YUV);
   1543 
   1544     cv::Mat dst_gold;
   1545     cv::cvtColor(src, dst_gold, cv::COLOR_YUV2BGR, 4);
   1546 
   1547     cv::Mat channels[4];
   1548     cv::split(src, channels);
   1549     channels[3] = cv::Mat(src.size(), depth, cv::Scalar::all(0));
   1550     cv::merge(channels, 4, src);
   1551 
   1552     cv::cuda::GpuMat dst;
   1553     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YUV2BGR, 4);
   1554 
   1555     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
   1556 }
   1557 
   1558 CUDA_TEST_P(CvtColor, YUV2RGB)
   1559 {
   1560     cv::Mat src;
   1561     cv::cvtColor(img, src, cv::COLOR_RGB2YUV);
   1562 
   1563     cv::cuda::GpuMat dst;
   1564     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_YUV2RGB);
   1565 
   1566     cv::Mat dst_gold;
   1567     cv::cvtColor(src, dst_gold, cv::COLOR_YUV2RGB);
   1568 
   1569     EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
   1570 }
   1571 
   1572 CUDA_TEST_P(CvtColor, BGR2YUV4)
   1573 {
   1574     cv::Mat src = img;
   1575 
   1576     cv::cuda::GpuMat dst;
   1577     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2YUV, 4);
   1578 
   1579     ASSERT_EQ(4, dst.channels());
   1580 
   1581     cv::Mat dst_gold;
   1582     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YUV);
   1583 
   1584     cv::Mat h_dst(dst);
   1585 
   1586     cv::Mat channels[4];
   1587     cv::split(h_dst, channels);
   1588     cv::merge(channels, 3, h_dst);
   1589 
   1590     EXPECT_MAT_NEAR(dst_gold, h_dst, 1e-5);
   1591 }
   1592 
   1593 CUDA_TEST_P(CvtColor, RGBA2YUV4)
   1594 {
   1595     cv::Mat src;
   1596     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1597 
   1598     cv::cuda::GpuMat dst;
   1599     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2YUV, 4);
   1600 
   1601     ASSERT_EQ(4, dst.channels());
   1602 
   1603     cv::Mat dst_gold;
   1604     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2YUV);
   1605 
   1606     cv::Mat h_dst(dst);
   1607 
   1608     cv::Mat channels[4];
   1609     cv::split(h_dst, channels);
   1610     cv::merge(channels, 3, h_dst);
   1611 
   1612     EXPECT_MAT_NEAR(dst_gold, h_dst, 1e-5);
   1613 }
   1614 
   1615 CUDA_TEST_P(CvtColor, BGR2Lab)
   1616 {
   1617     if (depth == CV_16U)
   1618         return;
   1619 
   1620     cv::Mat src = img;
   1621 
   1622     cv::cuda::GpuMat dst;
   1623     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2Lab);
   1624 
   1625     cv::Mat dst_gold;
   1626     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2Lab);
   1627 
   1628     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1629 }
   1630 
   1631 CUDA_TEST_P(CvtColor, RGB2Lab)
   1632 {
   1633     if (depth == CV_16U)
   1634         return;
   1635 
   1636     cv::Mat src = img;
   1637 
   1638     cv::cuda::GpuMat dst;
   1639     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2Lab);
   1640 
   1641     cv::Mat dst_gold;
   1642     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2Lab);
   1643 
   1644     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1645 }
   1646 
   1647 CUDA_TEST_P(CvtColor, BGRA2Lab4)
   1648 {
   1649     if (depth == CV_16U)
   1650         return;
   1651 
   1652     cv::Mat src;
   1653     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1654 
   1655     cv::cuda::GpuMat dst;
   1656     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2Lab, 4);
   1657 
   1658     ASSERT_EQ(4, dst.channels());
   1659 
   1660     cv::Mat dst_gold;
   1661     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2Lab);
   1662 
   1663     cv::Mat h_dst(dst);
   1664 
   1665     cv::Mat channels[4];
   1666     cv::split(h_dst, channels);
   1667     cv::merge(channels, 3, h_dst);
   1668 
   1669     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_8U ? 1 : 1e-3);
   1670 }
   1671 
   1672 CUDA_TEST_P(CvtColor, LBGR2Lab)
   1673 {
   1674     if (depth == CV_16U)
   1675         return;
   1676 
   1677     cv::Mat src = img;
   1678 
   1679     cv::cuda::GpuMat dst;
   1680     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_LBGR2Lab);
   1681 
   1682     cv::Mat dst_gold;
   1683     cv::cvtColor(src, dst_gold, cv::COLOR_LBGR2Lab);
   1684 
   1685     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1686 }
   1687 
   1688 CUDA_TEST_P(CvtColor, LRGB2Lab)
   1689 {
   1690     if (depth == CV_16U)
   1691         return;
   1692 
   1693     cv::Mat src = img;
   1694 
   1695     cv::cuda::GpuMat dst;
   1696     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_LRGB2Lab);
   1697 
   1698     cv::Mat dst_gold;
   1699     cv::cvtColor(src, dst_gold, cv::COLOR_LRGB2Lab);
   1700 
   1701     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1702 }
   1703 
   1704 CUDA_TEST_P(CvtColor, LBGRA2Lab4)
   1705 {
   1706     if (depth == CV_16U)
   1707         return;
   1708 
   1709     cv::Mat src;
   1710     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1711 
   1712     cv::cuda::GpuMat dst;
   1713     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_LBGR2Lab, 4);
   1714 
   1715     ASSERT_EQ(4, dst.channels());
   1716 
   1717     cv::Mat dst_gold;
   1718     cv::cvtColor(src, dst_gold, cv::COLOR_LBGR2Lab);
   1719 
   1720     cv::Mat h_dst(dst);
   1721 
   1722     cv::Mat channels[4];
   1723     cv::split(h_dst, channels);
   1724     cv::merge(channels, 3, h_dst);
   1725 
   1726     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_8U ? 1 : 1e-3);
   1727 }
   1728 
   1729 CUDA_TEST_P(CvtColor, Lab2BGR)
   1730 {
   1731     if (depth == CV_16U)
   1732         return;
   1733 
   1734     cv::Mat src;
   1735     cv::cvtColor(img, src, cv::COLOR_BGR2Lab);
   1736 
   1737     cv::cuda::GpuMat dst;
   1738     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Lab2BGR);
   1739 
   1740     cv::Mat dst_gold;
   1741     cv::cvtColor(src, dst_gold, cv::COLOR_Lab2BGR);
   1742 
   1743     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-5);
   1744 }
   1745 
   1746 CUDA_TEST_P(CvtColor, Lab2RGB)
   1747 {
   1748     if (depth == CV_16U)
   1749         return;
   1750 
   1751     cv::Mat src;
   1752     cv::cvtColor(img, src, cv::COLOR_BGR2Lab);
   1753 
   1754     cv::cuda::GpuMat dst;
   1755     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Lab2RGB);
   1756 
   1757     cv::Mat dst_gold;
   1758     cv::cvtColor(src, dst_gold, cv::COLOR_Lab2RGB);
   1759 
   1760     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-5);
   1761 }
   1762 
   1763 CUDA_TEST_P(CvtColor, Lab2BGRA)
   1764 {
   1765     if (depth == CV_16U)
   1766         return;
   1767 
   1768     cv::Mat src;
   1769     cv::cvtColor(img, src, cv::COLOR_BGR2Lab);
   1770 
   1771     cv::cuda::GpuMat dst;
   1772     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Lab2BGR, 4);
   1773 
   1774     ASSERT_EQ(4, dst.channels());
   1775 
   1776     cv::Mat dst_gold;
   1777     cv::cvtColor(src, dst_gold, cv::COLOR_Lab2BGR, 4);
   1778 
   1779     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-5);
   1780 }
   1781 
   1782 CUDA_TEST_P(CvtColor, Lab2LBGR)
   1783 {
   1784     if (depth == CV_16U)
   1785         return;
   1786 
   1787     cv::Mat src;
   1788     cv::cvtColor(img, src, cv::COLOR_BGR2Lab);
   1789 
   1790     cv::cuda::GpuMat dst;
   1791     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Lab2LBGR);
   1792 
   1793     cv::Mat dst_gold;
   1794     cv::cvtColor(src, dst_gold, cv::COLOR_Lab2LBGR);
   1795 
   1796     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-5);
   1797 }
   1798 
   1799 CUDA_TEST_P(CvtColor, Lab2LRGB)
   1800 {
   1801     if (depth == CV_16U)
   1802         return;
   1803 
   1804     cv::Mat src;
   1805     cv::cvtColor(img, src, cv::COLOR_BGR2Lab);
   1806 
   1807     cv::cuda::GpuMat dst;
   1808     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Lab2LRGB);
   1809 
   1810     cv::Mat dst_gold;
   1811     cv::cvtColor(src, dst_gold, cv::COLOR_Lab2LRGB);
   1812 
   1813     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-5);
   1814 }
   1815 
   1816 CUDA_TEST_P(CvtColor, Lab2LRGBA)
   1817 {
   1818     if (depth == CV_16U)
   1819         return;
   1820 
   1821     cv::Mat src;
   1822     cv::cvtColor(img, src, cv::COLOR_BGR2Lab);
   1823 
   1824     cv::cuda::GpuMat dst;
   1825     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Lab2LRGB, 4);
   1826 
   1827     cv::Mat dst_gold;
   1828     cv::cvtColor(src, dst_gold, cv::COLOR_Lab2LRGB, 4);
   1829 
   1830     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-5);
   1831 }
   1832 
   1833 CUDA_TEST_P(CvtColor, BGR2Luv)
   1834 {
   1835     if (depth == CV_16U)
   1836         return;
   1837 
   1838     cv::Mat src = img;
   1839 
   1840     cv::cuda::GpuMat dst;
   1841     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2Luv);
   1842 
   1843     cv::Mat dst_gold;
   1844     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2Luv);
   1845 
   1846     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1847 }
   1848 
   1849 CUDA_TEST_P(CvtColor, RGB2Luv)
   1850 {
   1851     if (depth == CV_16U)
   1852         return;
   1853 
   1854     cv::Mat src = img;
   1855 
   1856     cv::cuda::GpuMat dst;
   1857     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGB2Luv);
   1858 
   1859     cv::Mat dst_gold;
   1860     cv::cvtColor(src, dst_gold, cv::COLOR_RGB2Luv);
   1861 
   1862     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1863 }
   1864 
   1865 CUDA_TEST_P(CvtColor, BGRA2Luv4)
   1866 {
   1867     if (depth == CV_16U)
   1868         return;
   1869 
   1870     cv::Mat src;
   1871     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1872 
   1873     cv::cuda::GpuMat dst;
   1874     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BGR2Luv, 4);
   1875 
   1876     ASSERT_EQ(4, dst.channels());
   1877 
   1878     cv::Mat dst_gold;
   1879     cv::cvtColor(src, dst_gold, cv::COLOR_BGR2Luv);
   1880 
   1881     cv::Mat h_dst(dst);
   1882 
   1883     cv::Mat channels[4];
   1884     cv::split(h_dst, channels);
   1885     cv::merge(channels, 3, h_dst);
   1886 
   1887     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_8U ? 1 : 1e-3);
   1888 }
   1889 
   1890 CUDA_TEST_P(CvtColor, LBGR2Luv)
   1891 {
   1892     if (depth == CV_16U)
   1893         return;
   1894 
   1895     cv::Mat src = img;
   1896 
   1897     cv::cuda::GpuMat dst;
   1898     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_LBGR2Luv);
   1899 
   1900     cv::Mat dst_gold;
   1901     cv::cvtColor(src, dst_gold, cv::COLOR_LBGR2Luv);
   1902 
   1903     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1904 }
   1905 
   1906 CUDA_TEST_P(CvtColor, LRGB2Luv)
   1907 {
   1908     if (depth == CV_16U)
   1909         return;
   1910 
   1911     cv::Mat src = img;
   1912 
   1913     cv::cuda::GpuMat dst;
   1914     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_LRGB2Luv);
   1915 
   1916     cv::Mat dst_gold;
   1917     cv::cvtColor(src, dst_gold, cv::COLOR_LRGB2Luv);
   1918 
   1919     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-3);
   1920 }
   1921 
   1922 CUDA_TEST_P(CvtColor, LBGRA2Luv4)
   1923 {
   1924     if (depth == CV_16U)
   1925         return;
   1926 
   1927     cv::Mat src;
   1928     cv::cvtColor(img, src, cv::COLOR_BGR2RGBA);
   1929 
   1930     cv::cuda::GpuMat dst;
   1931     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_LBGR2Luv, 4);
   1932 
   1933     ASSERT_EQ(4, dst.channels());
   1934 
   1935     cv::Mat dst_gold;
   1936     cv::cvtColor(src, dst_gold, cv::COLOR_LBGR2Luv);
   1937 
   1938     cv::Mat h_dst(dst);
   1939 
   1940     cv::Mat channels[4];
   1941     cv::split(h_dst, channels);
   1942     cv::merge(channels, 3, h_dst);
   1943 
   1944     EXPECT_MAT_NEAR(dst_gold, h_dst, depth == CV_8U ? 1 : 1e-3);
   1945 }
   1946 
   1947 CUDA_TEST_P(CvtColor, Luv2BGR)
   1948 {
   1949     if (depth == CV_16U)
   1950         return;
   1951 
   1952     cv::Mat src;
   1953     cv::cvtColor(img, src, cv::COLOR_BGR2Luv);
   1954 
   1955     cv::cuda::GpuMat dst;
   1956     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Luv2BGR);
   1957 
   1958     cv::Mat dst_gold;
   1959     cv::cvtColor(src, dst_gold, cv::COLOR_Luv2BGR);
   1960 
   1961     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-4);
   1962 }
   1963 
   1964 CUDA_TEST_P(CvtColor, Luv2RGB)
   1965 {
   1966     if (depth == CV_16U)
   1967         return;
   1968 
   1969     cv::Mat src;
   1970     cv::cvtColor(img, src, cv::COLOR_BGR2Luv);
   1971 
   1972     cv::cuda::GpuMat dst;
   1973     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Luv2RGB);
   1974 
   1975     cv::Mat dst_gold;
   1976     cv::cvtColor(src, dst_gold, cv::COLOR_Luv2RGB);
   1977 
   1978     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-4);
   1979 }
   1980 
   1981 CUDA_TEST_P(CvtColor, Luv2BGRA)
   1982 {
   1983     if (depth == CV_16U)
   1984         return;
   1985 
   1986     cv::Mat src;
   1987     cv::cvtColor(img, src, cv::COLOR_BGR2Luv);
   1988 
   1989     cv::cuda::GpuMat dst;
   1990     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Luv2BGR, 4);
   1991 
   1992     ASSERT_EQ(4, dst.channels());
   1993 
   1994     cv::Mat dst_gold;
   1995     cv::cvtColor(src, dst_gold, cv::COLOR_Luv2BGR, 4);
   1996 
   1997     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-4);
   1998 }
   1999 
   2000 CUDA_TEST_P(CvtColor, Luv2LBGR)
   2001 {
   2002     if (depth == CV_16U)
   2003         return;
   2004 
   2005     cv::Mat src;
   2006     cv::cvtColor(img, src, cv::COLOR_BGR2Luv);
   2007 
   2008     cv::cuda::GpuMat dst;
   2009     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Luv2LBGR);
   2010 
   2011     cv::Mat dst_gold;
   2012     cv::cvtColor(src, dst_gold, cv::COLOR_Luv2LBGR);
   2013 
   2014     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-4);
   2015 }
   2016 
   2017 CUDA_TEST_P(CvtColor, Luv2LRGB)
   2018 {
   2019     if (depth == CV_16U)
   2020         return;
   2021 
   2022     cv::Mat src;
   2023     cv::cvtColor(img, src, cv::COLOR_BGR2Luv);
   2024 
   2025     cv::cuda::GpuMat dst;
   2026     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Luv2LRGB);
   2027 
   2028     cv::Mat dst_gold;
   2029     cv::cvtColor(src, dst_gold, cv::COLOR_Luv2LRGB);
   2030 
   2031     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-4);
   2032 }
   2033 
   2034 CUDA_TEST_P(CvtColor, Luv2LRGBA)
   2035 {
   2036     if (depth == CV_16U)
   2037         return;
   2038 
   2039     cv::Mat src;
   2040     cv::cvtColor(img, src, cv::COLOR_BGR2Luv);
   2041 
   2042     cv::cuda::GpuMat dst;
   2043     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_Luv2LRGB, 4);
   2044 
   2045     cv::Mat dst_gold;
   2046     cv::cvtColor(src, dst_gold, cv::COLOR_Luv2LRGB, 4);
   2047 
   2048     EXPECT_MAT_NEAR(dst_gold, dst, depth == CV_8U ? 1 : 1e-4);
   2049 }
   2050 
   2051 #if defined (CUDA_VERSION) && (CUDA_VERSION >= 5000)
   2052 
   2053 CUDA_TEST_P(CvtColor, RGBA2mRGBA)
   2054 {
   2055     if (depth != CV_8U)
   2056         return;
   2057 
   2058     cv::Mat src = randomMat(size, CV_MAKE_TYPE(depth, 4));
   2059 
   2060     cv::cuda::GpuMat dst = createMat(src.size(), src.type(), useRoi);
   2061     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_RGBA2mRGBA);
   2062 
   2063     cv::Mat dst_gold;
   2064     cv::cvtColor(src, dst_gold, cv::COLOR_RGBA2mRGBA);
   2065 
   2066     EXPECT_MAT_NEAR(dst_gold, dst, 1);
   2067 }
   2068 
   2069 #endif // defined (CUDA_VERSION) && (CUDA_VERSION >= 5000)
   2070 
   2071 CUDA_TEST_P(CvtColor, BayerBG2BGR)
   2072 {
   2073     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2074         return;
   2075 
   2076     cv::Mat src = randomMat(size, depth);
   2077 
   2078     cv::cuda::GpuMat dst;
   2079     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerBG2BGR);
   2080 
   2081     cv::Mat dst_gold;
   2082     cv::cvtColor(src, dst_gold, cv::COLOR_BayerBG2BGR);
   2083 
   2084     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2085 }
   2086 
   2087 CUDA_TEST_P(CvtColor, BayerBG2BGR4)
   2088 {
   2089     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2090         return;
   2091 
   2092     cv::Mat src = randomMat(size, depth);
   2093 
   2094     cv::cuda::GpuMat dst;
   2095     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerBG2BGR, 4);
   2096 
   2097     ASSERT_EQ(4, dst.channels());
   2098 
   2099     cv::Mat dst_gold;
   2100     cv::cvtColor(src, dst_gold, cv::COLOR_BayerBG2BGR);
   2101 
   2102     cv::Mat dst4(dst);
   2103     cv::Mat dst3;
   2104     cv::cvtColor(dst4, dst3, cv::COLOR_BGRA2BGR);
   2105 
   2106 
   2107     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst3(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2108 }
   2109 
   2110 CUDA_TEST_P(CvtColor, BayerGB2BGR)
   2111 {
   2112     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2113         return;
   2114 
   2115     cv::Mat src = randomMat(size, depth);
   2116 
   2117     cv::cuda::GpuMat dst;
   2118     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGB2BGR);
   2119 
   2120     cv::Mat dst_gold;
   2121     cv::cvtColor(src, dst_gold, cv::COLOR_BayerGB2BGR);
   2122 
   2123     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2124 }
   2125 
   2126 CUDA_TEST_P(CvtColor, BayerGB2BGR4)
   2127 {
   2128     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2129         return;
   2130 
   2131     cv::Mat src = randomMat(size, depth);
   2132 
   2133     cv::cuda::GpuMat dst;
   2134     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGB2BGR, 4);
   2135 
   2136     ASSERT_EQ(4, dst.channels());
   2137 
   2138     cv::Mat dst_gold;
   2139     cv::cvtColor(src, dst_gold, cv::COLOR_BayerGB2BGR);
   2140 
   2141     cv::Mat dst4(dst);
   2142     cv::Mat dst3;
   2143     cv::cvtColor(dst4, dst3, cv::COLOR_BGRA2BGR);
   2144 
   2145     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst3(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2146 }
   2147 
   2148 CUDA_TEST_P(CvtColor, BayerRG2BGR)
   2149 {
   2150     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2151         return;
   2152 
   2153     cv::Mat src = randomMat(size, depth);
   2154 
   2155     cv::cuda::GpuMat dst;
   2156     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerRG2BGR);
   2157 
   2158     cv::Mat dst_gold;
   2159     cv::cvtColor(src, dst_gold, cv::COLOR_BayerRG2BGR);
   2160 
   2161     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2162 }
   2163 
   2164 CUDA_TEST_P(CvtColor, BayerRG2BGR4)
   2165 {
   2166     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2167         return;
   2168 
   2169     cv::Mat src = randomMat(size, depth);
   2170 
   2171     cv::cuda::GpuMat dst;
   2172     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerRG2BGR, 4);
   2173 
   2174     ASSERT_EQ(4, dst.channels());
   2175 
   2176     cv::Mat dst_gold;
   2177     cv::cvtColor(src, dst_gold, cv::COLOR_BayerRG2BGR);
   2178 
   2179     cv::Mat dst4(dst);
   2180     cv::Mat dst3;
   2181     cv::cvtColor(dst4, dst3, cv::COLOR_BGRA2BGR);
   2182 
   2183     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst3(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2184 }
   2185 
   2186 CUDA_TEST_P(CvtColor, BayerGR2BGR)
   2187 {
   2188     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2189         return;
   2190 
   2191     cv::Mat src = randomMat(size, depth);
   2192 
   2193     cv::cuda::GpuMat dst;
   2194     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGR2BGR);
   2195 
   2196     cv::Mat dst_gold;
   2197     cv::cvtColor(src, dst_gold, cv::COLOR_BayerGR2BGR);
   2198 
   2199     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2200 }
   2201 
   2202 CUDA_TEST_P(CvtColor, BayerGR2BGR4)
   2203 {
   2204     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2205         return;
   2206 
   2207     cv::Mat src = randomMat(size, depth);
   2208 
   2209     cv::cuda::GpuMat dst;
   2210     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGR2BGR, 4);
   2211 
   2212     ASSERT_EQ(4, dst.channels());
   2213 
   2214     cv::Mat dst_gold;
   2215     cv::cvtColor(src, dst_gold, cv::COLOR_BayerGR2BGR);
   2216 
   2217     cv::Mat dst4(dst);
   2218     cv::Mat dst3;
   2219     cv::cvtColor(dst4, dst3, cv::COLOR_BGRA2BGR);
   2220 
   2221     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst3(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 0);
   2222 }
   2223 
   2224 CUDA_TEST_P(CvtColor, BayerBG2Gray)
   2225 {
   2226     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2227         return;
   2228 
   2229     cv::Mat src = randomMat(size, depth);
   2230 
   2231     cv::cuda::GpuMat dst;
   2232     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerBG2GRAY);
   2233 
   2234     cv::Mat dst_gold;
   2235     cv::cvtColor(src, dst_gold, cv::COLOR_BayerBG2GRAY);
   2236 
   2237     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2);
   2238 }
   2239 
   2240 CUDA_TEST_P(CvtColor, BayerGB2Gray)
   2241 {
   2242     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2243         return;
   2244 
   2245     cv::Mat src = randomMat(size, depth);
   2246 
   2247     cv::cuda::GpuMat dst;
   2248     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGB2GRAY);
   2249 
   2250     cv::Mat dst_gold;
   2251     cv::cvtColor(src, dst_gold, cv::COLOR_BayerGB2GRAY);
   2252 
   2253     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2);
   2254 }
   2255 
   2256 CUDA_TEST_P(CvtColor, BayerRG2Gray)
   2257 {
   2258     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2259         return;
   2260 
   2261     cv::Mat src = randomMat(size, depth);
   2262 
   2263     cv::cuda::GpuMat dst;
   2264     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerRG2GRAY);
   2265 
   2266     cv::Mat dst_gold;
   2267     cv::cvtColor(src, dst_gold, cv::COLOR_BayerRG2GRAY);
   2268 
   2269     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2);
   2270 }
   2271 
   2272 CUDA_TEST_P(CvtColor, BayerGR2Gray)
   2273 {
   2274     if ((depth != CV_8U && depth != CV_16U) || useRoi)
   2275         return;
   2276 
   2277     cv::Mat src = randomMat(size, depth);
   2278 
   2279     cv::cuda::GpuMat dst;
   2280     cv::cuda::cvtColor(loadMat(src, useRoi), dst, cv::COLOR_BayerGR2GRAY);
   2281 
   2282     cv::Mat dst_gold;
   2283     cv::cvtColor(src, dst_gold, cv::COLOR_BayerGR2GRAY);
   2284 
   2285     EXPECT_MAT_NEAR(dst_gold(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), dst(cv::Rect(1, 1, dst.cols - 2, dst.rows - 2)), 2);
   2286 }
   2287 
   2288 INSTANTIATE_TEST_CASE_P(CUDA_ImgProc, CvtColor, testing::Combine(
   2289     ALL_DEVICES,
   2290     DIFFERENT_SIZES,
   2291     testing::Values(MatDepth(CV_8U), MatDepth(CV_16U), MatDepth(CV_32F)),
   2292     WHOLE_SUBMAT));
   2293 
   2294 ///////////////////////////////////////////////////////////////////////////////////////////////////////
   2295 // Demosaicing
   2296 
   2297 struct Demosaicing : testing::TestWithParam<cv::cuda::DeviceInfo>
   2298 {
   2299     cv::cuda::DeviceInfo devInfo;
   2300 
   2301     virtual void SetUp()
   2302     {
   2303         devInfo = GetParam();
   2304 
   2305         cv::cuda::setDevice(devInfo.deviceID());
   2306     }
   2307 
   2308     static void mosaic(const cv::Mat_<cv::Vec3b>& src, cv::Mat_<uchar>& dst, cv::Point firstRed)
   2309     {
   2310         dst.create(src.size());
   2311 
   2312         for (int y = 0; y < src.rows; ++y)
   2313         {
   2314             for (int x = 0; x < src.cols; ++x)
   2315             {
   2316                 cv::Vec3b pix = src(y, x);
   2317 
   2318                 cv::Point alternate;
   2319                 alternate.x = (x + firstRed.x) % 2;
   2320                 alternate.y = (y + firstRed.y) % 2;
   2321 
   2322                 if (alternate.y == 0)
   2323                 {
   2324                     if (alternate.x == 0)
   2325                     {
   2326                         // RG
   2327                         // GB
   2328                         dst(y, x) = pix[2];
   2329                     }
   2330                     else
   2331                     {
   2332                         // GR
   2333                         // BG
   2334                         dst(y, x) = pix[1];
   2335                     }
   2336                 }
   2337                 else
   2338                 {
   2339                     if (alternate.x == 0)
   2340                     {
   2341                         // GB
   2342                         // RG
   2343                         dst(y, x) = pix[1];
   2344                     }
   2345                     else
   2346                     {
   2347                         // BG
   2348                         // GR
   2349                         dst(y, x) = pix[0];
   2350                     }
   2351                 }
   2352             }
   2353         }
   2354     }
   2355 };
   2356 
   2357 CUDA_TEST_P(Demosaicing, BayerBG2BGR)
   2358 {
   2359     cv::Mat img = readImage("stereobm/aloe-L.png");
   2360     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2361 
   2362     cv::Mat_<uchar> src;
   2363     mosaic(img, src, cv::Point(1, 1));
   2364 
   2365     cv::cuda::GpuMat dst;
   2366     cv::cuda::demosaicing(loadMat(src), dst, cv::COLOR_BayerBG2BGR);
   2367 
   2368     EXPECT_MAT_SIMILAR(img, dst, 2e-2);
   2369 }
   2370 
   2371 CUDA_TEST_P(Demosaicing, BayerGB2BGR)
   2372 {
   2373     cv::Mat img = readImage("stereobm/aloe-L.png");
   2374     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2375 
   2376     cv::Mat_<uchar> src;
   2377     mosaic(img, src, cv::Point(0, 1));
   2378 
   2379     cv::cuda::GpuMat dst;
   2380     cv::cuda::demosaicing(loadMat(src), dst, cv::COLOR_BayerGB2BGR);
   2381 
   2382     EXPECT_MAT_SIMILAR(img, dst, 2e-2);
   2383 }
   2384 
   2385 CUDA_TEST_P(Demosaicing, BayerRG2BGR)
   2386 {
   2387     cv::Mat img = readImage("stereobm/aloe-L.png");
   2388     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2389 
   2390     cv::Mat_<uchar> src;
   2391     mosaic(img, src, cv::Point(0, 0));
   2392 
   2393     cv::cuda::GpuMat dst;
   2394     cv::cuda::demosaicing(loadMat(src), dst, cv::COLOR_BayerRG2BGR);
   2395 
   2396     EXPECT_MAT_SIMILAR(img, dst, 2e-2);
   2397 }
   2398 
   2399 CUDA_TEST_P(Demosaicing, BayerGR2BGR)
   2400 {
   2401     cv::Mat img = readImage("stereobm/aloe-L.png");
   2402     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2403 
   2404     cv::Mat_<uchar> src;
   2405     mosaic(img, src, cv::Point(1, 0));
   2406 
   2407     cv::cuda::GpuMat dst;
   2408     cv::cuda::demosaicing(loadMat(src), dst, cv::COLOR_BayerGR2BGR);
   2409 
   2410     EXPECT_MAT_SIMILAR(img, dst, 2e-2);
   2411 }
   2412 
   2413 CUDA_TEST_P(Demosaicing, BayerBG2BGR_MHT)
   2414 {
   2415     cv::Mat img = readImage("stereobm/aloe-L.png");
   2416     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2417 
   2418     cv::Mat_<uchar> src;
   2419     mosaic(img, src, cv::Point(1, 1));
   2420 
   2421     cv::cuda::GpuMat dst;
   2422     cv::cuda::demosaicing(loadMat(src), dst, cv::cuda::COLOR_BayerBG2BGR_MHT);
   2423 
   2424     EXPECT_MAT_SIMILAR(img, dst, 5e-3);
   2425 }
   2426 
   2427 CUDA_TEST_P(Demosaicing, BayerGB2BGR_MHT)
   2428 {
   2429     cv::Mat img = readImage("stereobm/aloe-L.png");
   2430     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2431 
   2432     cv::Mat_<uchar> src;
   2433     mosaic(img, src, cv::Point(0, 1));
   2434 
   2435     cv::cuda::GpuMat dst;
   2436     cv::cuda::demosaicing(loadMat(src), dst, cv::cuda::COLOR_BayerGB2BGR_MHT);
   2437 
   2438     EXPECT_MAT_SIMILAR(img, dst, 5e-3);
   2439 }
   2440 
   2441 CUDA_TEST_P(Demosaicing, BayerRG2BGR_MHT)
   2442 {
   2443     cv::Mat img = readImage("stereobm/aloe-L.png");
   2444     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2445 
   2446     cv::Mat_<uchar> src;
   2447     mosaic(img, src, cv::Point(0, 0));
   2448 
   2449     cv::cuda::GpuMat dst;
   2450     cv::cuda::demosaicing(loadMat(src), dst, cv::cuda::COLOR_BayerRG2BGR_MHT);
   2451 
   2452     EXPECT_MAT_SIMILAR(img, dst, 5e-3);
   2453 }
   2454 
   2455 CUDA_TEST_P(Demosaicing, BayerGR2BGR_MHT)
   2456 {
   2457     cv::Mat img = readImage("stereobm/aloe-L.png");
   2458     ASSERT_FALSE(img.empty()) << "Can't load input image";
   2459 
   2460     cv::Mat_<uchar> src;
   2461     mosaic(img, src, cv::Point(1, 0));
   2462 
   2463     cv::cuda::GpuMat dst;
   2464     cv::cuda::demosaicing(loadMat(src), dst, cv::cuda::COLOR_BayerGR2BGR_MHT);
   2465 
   2466     EXPECT_MAT_SIMILAR(img, dst, 5e-3);
   2467 }
   2468 
   2469 INSTANTIATE_TEST_CASE_P(CUDA_ImgProc, Demosaicing, ALL_DEVICES);
   2470 
   2471 ///////////////////////////////////////////////////////////////////////////////////////////////////////
   2472 // swapChannels
   2473 
   2474 PARAM_TEST_CASE(SwapChannels, cv::cuda::DeviceInfo, cv::Size, UseRoi)
   2475 {
   2476     cv::cuda::DeviceInfo devInfo;
   2477     cv::Size size;
   2478     bool useRoi;
   2479 
   2480     virtual void SetUp()
   2481     {
   2482         devInfo = GET_PARAM(0);
   2483         size = GET_PARAM(1);
   2484         useRoi = GET_PARAM(2);
   2485 
   2486         cv::cuda::setDevice(devInfo.deviceID());
   2487     }
   2488 };
   2489 
   2490 CUDA_TEST_P(SwapChannels, Accuracy)
   2491 {
   2492     cv::Mat src = readImageType("stereobm/aloe-L.png", CV_8UC4);
   2493     ASSERT_FALSE(src.empty());
   2494 
   2495     cv::cuda::GpuMat d_src = loadMat(src, useRoi);
   2496 
   2497     const int dstOrder[] = {2, 1, 0, 3};
   2498     cv::cuda::swapChannels(d_src, dstOrder);
   2499 
   2500     cv::Mat dst_gold;
   2501     cv::cvtColor(src, dst_gold, cv::COLOR_BGRA2RGBA);
   2502 
   2503     EXPECT_MAT_NEAR(dst_gold, d_src, 0.0);
   2504 }
   2505 
   2506 INSTANTIATE_TEST_CASE_P(CUDA_ImgProc, SwapChannels, testing::Combine(
   2507     ALL_DEVICES,
   2508     DIFFERENT_SIZES,
   2509     WHOLE_SUBMAT));
   2510 
   2511 #endif // HAVE_CUDA
   2512