1 #include "perf_precomp.hpp" 2 3 using namespace std; 4 using namespace cv; 5 using namespace perf; 6 using std::tr1::make_tuple; 7 using std::tr1::get; 8 9 //extra color conversions supported implicitly 10 enum 11 { 12 CX_BGRA2HLS = COLOR_COLORCVT_MAX + COLOR_BGR2HLS, 13 CX_BGRA2HLS_FULL = COLOR_COLORCVT_MAX + COLOR_BGR2HLS_FULL, 14 CX_BGRA2HSV = COLOR_COLORCVT_MAX + COLOR_BGR2HSV, 15 CX_BGRA2HSV_FULL = COLOR_COLORCVT_MAX + COLOR_BGR2HSV_FULL, 16 CX_BGRA2Lab = COLOR_COLORCVT_MAX + COLOR_BGR2Lab, 17 CX_BGRA2Luv = COLOR_COLORCVT_MAX + COLOR_BGR2Luv, 18 CX_BGRA2XYZ = COLOR_COLORCVT_MAX + COLOR_BGR2XYZ, 19 CX_BGRA2YCrCb = COLOR_COLORCVT_MAX + COLOR_BGR2YCrCb, 20 CX_BGRA2YUV = COLOR_COLORCVT_MAX + COLOR_BGR2YUV, 21 CX_HLS2BGRA = COLOR_COLORCVT_MAX + COLOR_HLS2BGR, 22 CX_HLS2BGRA_FULL = COLOR_COLORCVT_MAX + COLOR_HLS2BGR_FULL, 23 CX_HLS2RGBA = COLOR_COLORCVT_MAX + COLOR_HLS2RGB, 24 CX_HLS2RGBA_FULL = COLOR_COLORCVT_MAX + COLOR_HLS2RGB_FULL, 25 CX_HSV2BGRA = COLOR_COLORCVT_MAX + COLOR_HSV2BGR, 26 CX_HSV2BGRA_FULL = COLOR_COLORCVT_MAX + COLOR_HSV2BGR_FULL, 27 CX_HSV2RGBA = COLOR_COLORCVT_MAX + COLOR_HSV2RGB, 28 CX_HSV2RGBA_FULL = COLOR_COLORCVT_MAX + COLOR_HSV2RGB_FULL, 29 CX_Lab2BGRA = COLOR_COLORCVT_MAX + COLOR_Lab2BGR, 30 CX_Lab2LBGRA = COLOR_COLORCVT_MAX + COLOR_Lab2LBGR, 31 CX_Lab2LRGBA = COLOR_COLORCVT_MAX + COLOR_Lab2LRGB, 32 CX_Lab2RGBA = COLOR_COLORCVT_MAX + COLOR_Lab2RGB, 33 CX_LBGRA2Lab = COLOR_COLORCVT_MAX + COLOR_LBGR2Lab, 34 CX_LBGRA2Luv = COLOR_COLORCVT_MAX + COLOR_LBGR2Luv, 35 CX_LRGBA2Lab = COLOR_COLORCVT_MAX + COLOR_LRGB2Lab, 36 CX_LRGBA2Luv = COLOR_COLORCVT_MAX + COLOR_LRGB2Luv, 37 CX_Luv2BGRA = COLOR_COLORCVT_MAX + COLOR_Luv2BGR, 38 CX_Luv2LBGRA = COLOR_COLORCVT_MAX + COLOR_Luv2LBGR, 39 CX_Luv2LRGBA = COLOR_COLORCVT_MAX + COLOR_Luv2LRGB, 40 CX_Luv2RGBA = COLOR_COLORCVT_MAX + COLOR_Luv2RGB, 41 CX_RGBA2HLS = COLOR_COLORCVT_MAX + COLOR_RGB2HLS, 42 CX_RGBA2HLS_FULL = COLOR_COLORCVT_MAX + COLOR_RGB2HLS_FULL, 43 CX_RGBA2HSV = COLOR_COLORCVT_MAX + COLOR_RGB2HSV, 44 CX_RGBA2HSV_FULL = COLOR_COLORCVT_MAX + COLOR_RGB2HSV_FULL, 45 CX_RGBA2Lab = COLOR_COLORCVT_MAX + COLOR_RGB2Lab, 46 CX_RGBA2Luv = COLOR_COLORCVT_MAX + COLOR_RGB2Luv, 47 CX_RGBA2XYZ = COLOR_COLORCVT_MAX + COLOR_RGB2XYZ, 48 CX_RGBA2YCrCb = COLOR_COLORCVT_MAX + COLOR_RGB2YCrCb, 49 CX_RGBA2YUV = COLOR_COLORCVT_MAX + COLOR_RGB2YUV, 50 CX_XYZ2BGRA = COLOR_COLORCVT_MAX + COLOR_XYZ2BGR, 51 CX_XYZ2RGBA = COLOR_COLORCVT_MAX + COLOR_XYZ2RGB, 52 CX_YCrCb2BGRA = COLOR_COLORCVT_MAX + COLOR_YCrCb2BGR, 53 CX_YCrCb2RGBA = COLOR_COLORCVT_MAX + COLOR_YCrCb2RGB, 54 CX_YUV2BGRA = COLOR_COLORCVT_MAX + COLOR_YUV2BGR, 55 CX_YUV2RGBA = COLOR_COLORCVT_MAX + COLOR_YUV2RGB 56 }; 57 58 CV_ENUM(CvtMode, 59 COLOR_BGR2BGR555, COLOR_BGR2BGR565, COLOR_BGR2BGRA, COLOR_BGR2GRAY, 60 COLOR_BGR2HLS, COLOR_BGR2HLS_FULL, COLOR_BGR2HSV, COLOR_BGR2HSV_FULL, 61 COLOR_BGR2Lab, COLOR_BGR2Luv, COLOR_BGR2RGB, COLOR_BGR2RGBA, COLOR_BGR2XYZ, 62 COLOR_BGR2YCrCb, COLOR_BGR2YUV, COLOR_BGR5552BGR, COLOR_BGR5552BGRA, 63 64 COLOR_BGR5552GRAY, COLOR_BGR5552RGB, COLOR_BGR5552RGBA, COLOR_BGR5652BGR, 65 COLOR_BGR5652BGRA, COLOR_BGR5652GRAY, COLOR_BGR5652RGB, COLOR_BGR5652RGBA, 66 67 COLOR_BGRA2BGR, COLOR_BGRA2BGR555, COLOR_BGRA2BGR565, COLOR_BGRA2GRAY, COLOR_BGRA2RGBA, 68 CX_BGRA2HLS, CX_BGRA2HLS_FULL, CX_BGRA2HSV, CX_BGRA2HSV_FULL, 69 CX_BGRA2Lab, CX_BGRA2Luv, CX_BGRA2XYZ, 70 CX_BGRA2YCrCb, CX_BGRA2YUV, 71 72 COLOR_GRAY2BGR, COLOR_GRAY2BGR555, COLOR_GRAY2BGR565, COLOR_GRAY2BGRA, 73 74 COLOR_HLS2BGR, COLOR_HLS2BGR_FULL, COLOR_HLS2RGB, COLOR_HLS2RGB_FULL, 75 CX_HLS2BGRA, CX_HLS2BGRA_FULL, CX_HLS2RGBA, CX_HLS2RGBA_FULL, 76 77 COLOR_HSV2BGR, COLOR_HSV2BGR_FULL, COLOR_HSV2RGB, COLOR_HSV2RGB_FULL, 78 CX_HSV2BGRA, CX_HSV2BGRA_FULL, CX_HSV2RGBA, CX_HSV2RGBA_FULL, 79 80 COLOR_Lab2BGR, COLOR_Lab2LBGR, COLOR_Lab2LRGB, COLOR_Lab2RGB, 81 CX_Lab2BGRA, CX_Lab2LBGRA, CX_Lab2LRGBA, CX_Lab2RGBA, 82 83 COLOR_LBGR2Lab, COLOR_LBGR2Luv, COLOR_LRGB2Lab, COLOR_LRGB2Luv, 84 CX_LBGRA2Lab, CX_LBGRA2Luv, CX_LRGBA2Lab, CX_LRGBA2Luv, 85 86 COLOR_Luv2BGR, COLOR_Luv2LBGR, COLOR_Luv2LRGB, COLOR_Luv2RGB, 87 CX_Luv2BGRA, CX_Luv2LBGRA, CX_Luv2LRGBA, CX_Luv2RGBA, 88 89 COLOR_RGB2BGR555, COLOR_RGB2BGR565, COLOR_RGB2GRAY, 90 COLOR_RGB2HLS, COLOR_RGB2HLS_FULL, COLOR_RGB2HSV, COLOR_RGB2HSV_FULL, 91 COLOR_RGB2Lab, COLOR_RGB2Luv, COLOR_RGB2XYZ, COLOR_RGB2YCrCb, COLOR_RGB2YUV, 92 93 COLOR_RGBA2BGR, COLOR_RGBA2BGR555, COLOR_RGBA2BGR565, COLOR_RGBA2GRAY, 94 CX_RGBA2HLS, CX_RGBA2HLS_FULL, CX_RGBA2HSV, CX_RGBA2HSV_FULL, 95 CX_RGBA2Lab, CX_RGBA2Luv, CX_RGBA2XYZ, 96 CX_RGBA2YCrCb, CX_RGBA2YUV, 97 98 COLOR_XYZ2BGR, COLOR_XYZ2RGB, CX_XYZ2BGRA, CX_XYZ2RGBA, 99 100 COLOR_YCrCb2BGR, COLOR_YCrCb2RGB, CX_YCrCb2BGRA, CX_YCrCb2RGBA, 101 COLOR_YUV2BGR, COLOR_YUV2RGB, CX_YUV2BGRA, CX_YUV2RGBA 102 ) 103 104 105 CV_ENUM(CvtModeBayer, 106 COLOR_BayerBG2BGR, COLOR_BayerBG2BGR_VNG, COLOR_BayerBG2GRAY, 107 COLOR_BayerGB2BGR, COLOR_BayerGB2BGR_VNG, COLOR_BayerGB2GRAY, 108 COLOR_BayerGR2BGR, COLOR_BayerGR2BGR_VNG, COLOR_BayerGR2GRAY, 109 COLOR_BayerRG2BGR, COLOR_BayerRG2BGR_VNG, COLOR_BayerRG2GRAY 110 ) 111 112 113 CV_ENUM(CvtMode2, COLOR_YUV2BGR_NV12, COLOR_YUV2BGRA_NV12, COLOR_YUV2RGB_NV12, COLOR_YUV2RGBA_NV12, COLOR_YUV2BGR_NV21, COLOR_YUV2BGRA_NV21, COLOR_YUV2RGB_NV21, COLOR_YUV2RGBA_NV21, 114 COLOR_YUV2BGR_YV12, COLOR_YUV2BGRA_YV12, COLOR_YUV2RGB_YV12, COLOR_YUV2RGBA_YV12, COLOR_YUV2BGR_IYUV, COLOR_YUV2BGRA_IYUV, COLOR_YUV2RGB_IYUV, COLOR_YUV2RGBA_IYUV, 115 COLOR_YUV2GRAY_420, COLOR_YUV2RGB_UYVY, COLOR_YUV2BGR_UYVY, COLOR_YUV2RGBA_UYVY, COLOR_YUV2BGRA_UYVY, COLOR_YUV2RGB_YUY2, COLOR_YUV2BGR_YUY2, COLOR_YUV2RGB_YVYU, 116 COLOR_YUV2BGR_YVYU, COLOR_YUV2RGBA_YUY2, COLOR_YUV2BGRA_YUY2, COLOR_YUV2RGBA_YVYU, COLOR_YUV2BGRA_YVYU) 117 118 CV_ENUM(CvtMode3, COLOR_RGB2YUV_IYUV, COLOR_BGR2YUV_IYUV, COLOR_RGBA2YUV_IYUV, COLOR_BGRA2YUV_IYUV, 119 COLOR_RGB2YUV_YV12, COLOR_BGR2YUV_YV12, COLOR_RGBA2YUV_YV12, COLOR_BGRA2YUV_YV12) 120 121 struct ChPair 122 { 123 ChPair(int _scn, int _dcn): scn(_scn), dcn(_dcn) {} 124 int scn, dcn; 125 }; 126 127 ChPair getConversionInfo(int cvtMode) 128 { 129 switch(cvtMode) 130 { 131 case COLOR_BayerBG2GRAY: case COLOR_BayerGB2GRAY: 132 case COLOR_BayerGR2GRAY: case COLOR_BayerRG2GRAY: 133 case COLOR_YUV2GRAY_420: 134 return ChPair(1,1); 135 case COLOR_GRAY2BGR555: case COLOR_GRAY2BGR565: 136 return ChPair(1,2); 137 case COLOR_BayerBG2BGR: case COLOR_BayerBG2BGR_VNG: 138 case COLOR_BayerGB2BGR: case COLOR_BayerGB2BGR_VNG: 139 case COLOR_BayerGR2BGR: case COLOR_BayerGR2BGR_VNG: 140 case COLOR_BayerRG2BGR: case COLOR_BayerRG2BGR_VNG: 141 case COLOR_GRAY2BGR: 142 case COLOR_YUV2BGR_NV12: case COLOR_YUV2RGB_NV12: 143 case COLOR_YUV2BGR_NV21: case COLOR_YUV2RGB_NV21: 144 case COLOR_YUV2BGR_YV12: case COLOR_YUV2RGB_YV12: 145 case COLOR_YUV2BGR_IYUV: case COLOR_YUV2RGB_IYUV: 146 return ChPair(1,3); 147 case COLOR_GRAY2BGRA: 148 case COLOR_YUV2BGRA_NV12: case COLOR_YUV2RGBA_NV12: 149 case COLOR_YUV2BGRA_NV21: case COLOR_YUV2RGBA_NV21: 150 case COLOR_YUV2BGRA_YV12: case COLOR_YUV2RGBA_YV12: 151 case COLOR_YUV2BGRA_IYUV: case COLOR_YUV2RGBA_IYUV: 152 return ChPair(1,4); 153 case COLOR_BGR5552GRAY: case COLOR_BGR5652GRAY: 154 return ChPair(2,1); 155 case COLOR_BGR5552BGR: case COLOR_BGR5552RGB: 156 case COLOR_BGR5652BGR: case COLOR_BGR5652RGB: 157 case COLOR_YUV2RGB_UYVY: case COLOR_YUV2BGR_UYVY: 158 case COLOR_YUV2RGB_YUY2: case COLOR_YUV2BGR_YUY2: 159 case COLOR_YUV2RGB_YVYU: case COLOR_YUV2BGR_YVYU: 160 return ChPair(2,3); 161 case COLOR_BGR5552BGRA: case COLOR_BGR5552RGBA: 162 case COLOR_BGR5652BGRA: case COLOR_BGR5652RGBA: 163 case COLOR_YUV2RGBA_UYVY: case COLOR_YUV2BGRA_UYVY: 164 case COLOR_YUV2RGBA_YUY2: case COLOR_YUV2BGRA_YUY2: 165 case COLOR_YUV2RGBA_YVYU: case COLOR_YUV2BGRA_YVYU: 166 return ChPair(2,4); 167 case COLOR_BGR2GRAY: case COLOR_RGB2GRAY: 168 case COLOR_RGB2YUV_IYUV: case COLOR_RGB2YUV_YV12: 169 case COLOR_BGR2YUV_IYUV: case COLOR_BGR2YUV_YV12: 170 return ChPair(3,1); 171 case COLOR_BGR2BGR555: case COLOR_BGR2BGR565: 172 case COLOR_RGB2BGR555: case COLOR_RGB2BGR565: 173 return ChPair(3,2); 174 case COLOR_BGR2HLS: case COLOR_BGR2HLS_FULL: 175 case COLOR_BGR2HSV: case COLOR_BGR2HSV_FULL: 176 case COLOR_BGR2Lab: case COLOR_BGR2Luv: 177 case COLOR_BGR2RGB: case COLOR_BGR2XYZ: 178 case COLOR_BGR2YCrCb: case COLOR_BGR2YUV: 179 case COLOR_HLS2BGR: case COLOR_HLS2BGR_FULL: 180 case COLOR_HLS2RGB: case COLOR_HLS2RGB_FULL: 181 case COLOR_HSV2BGR: case COLOR_HSV2BGR_FULL: 182 case COLOR_HSV2RGB: case COLOR_HSV2RGB_FULL: 183 case COLOR_Lab2BGR: case COLOR_Lab2LBGR: 184 case COLOR_Lab2LRGB: case COLOR_Lab2RGB: 185 case COLOR_LBGR2Lab: case COLOR_LBGR2Luv: 186 case COLOR_LRGB2Lab: case COLOR_LRGB2Luv: 187 case COLOR_Luv2BGR: case COLOR_Luv2LBGR: 188 case COLOR_Luv2LRGB: case COLOR_Luv2RGB: 189 case COLOR_RGB2HLS: case COLOR_RGB2HLS_FULL: 190 case COLOR_RGB2HSV: case COLOR_RGB2HSV_FULL: 191 case COLOR_RGB2Lab: case COLOR_RGB2Luv: 192 case COLOR_RGB2XYZ: case COLOR_RGB2YCrCb: 193 case COLOR_RGB2YUV: case COLOR_XYZ2BGR: 194 case COLOR_XYZ2RGB: case COLOR_YCrCb2BGR: 195 case COLOR_YCrCb2RGB: case COLOR_YUV2BGR: 196 case COLOR_YUV2RGB: 197 return ChPair(3,3); 198 case COLOR_BGR2BGRA: case COLOR_BGR2RGBA: 199 case CX_HLS2BGRA: case CX_HLS2BGRA_FULL: 200 case CX_HLS2RGBA: case CX_HLS2RGBA_FULL: 201 case CX_HSV2BGRA: case CX_HSV2BGRA_FULL: 202 case CX_HSV2RGBA: case CX_HSV2RGBA_FULL: 203 case CX_Lab2BGRA: case CX_Lab2LBGRA: 204 case CX_Lab2LRGBA: case CX_Lab2RGBA: 205 case CX_Luv2BGRA: case CX_Luv2LBGRA: 206 case CX_Luv2LRGBA: case CX_Luv2RGBA: 207 case CX_XYZ2BGRA: case CX_XYZ2RGBA: 208 case CX_YCrCb2BGRA: case CX_YCrCb2RGBA: 209 case CX_YUV2BGRA: case CX_YUV2RGBA: 210 return ChPair(3,4); 211 case COLOR_BGRA2GRAY: case COLOR_RGBA2GRAY: 212 case COLOR_RGBA2YUV_IYUV: case COLOR_RGBA2YUV_YV12: 213 case COLOR_BGRA2YUV_IYUV: case COLOR_BGRA2YUV_YV12: 214 return ChPair(4,1); 215 case COLOR_BGRA2BGR555: case COLOR_BGRA2BGR565: 216 case COLOR_RGBA2BGR555: case COLOR_RGBA2BGR565: 217 return ChPair(4,2); 218 case COLOR_BGRA2BGR: case CX_BGRA2HLS: 219 case CX_BGRA2HLS_FULL: case CX_BGRA2HSV: 220 case CX_BGRA2HSV_FULL: case CX_BGRA2Lab: 221 case CX_BGRA2Luv: case CX_BGRA2XYZ: 222 case CX_BGRA2YCrCb: case CX_BGRA2YUV: 223 case CX_LBGRA2Lab: case CX_LBGRA2Luv: 224 case CX_LRGBA2Lab: case CX_LRGBA2Luv: 225 case COLOR_RGBA2BGR: case CX_RGBA2HLS: 226 case CX_RGBA2HLS_FULL: case CX_RGBA2HSV: 227 case CX_RGBA2HSV_FULL: case CX_RGBA2Lab: 228 case CX_RGBA2Luv: case CX_RGBA2XYZ: 229 case CX_RGBA2YCrCb: case CX_RGBA2YUV: 230 return ChPair(4,3); 231 case COLOR_BGRA2RGBA: 232 return ChPair(4,4); 233 default: 234 ADD_FAILURE() << "Unknown conversion type"; 235 break; 236 }; 237 return ChPair(0,0); 238 } 239 240 typedef std::tr1::tuple<Size, CvtMode> Size_CvtMode_t; 241 typedef perf::TestBaseWithParam<Size_CvtMode_t> Size_CvtMode; 242 243 PERF_TEST_P(Size_CvtMode, cvtColor8u, 244 testing::Combine( 245 testing::Values(::perf::szODD, ::perf::szVGA, ::perf::sz1080p), 246 CvtMode::all() 247 ) 248 ) 249 { 250 Size sz = get<0>(GetParam()); 251 int _mode = get<1>(GetParam()), mode = _mode; 252 ChPair ch = getConversionInfo(mode); 253 mode %= COLOR_COLORCVT_MAX; 254 255 Mat src(sz, CV_8UC(ch.scn)); 256 Mat dst(sz, CV_8UC(ch.dcn)); 257 258 declare.time(100); 259 declare.in(src, WARMUP_RNG).out(dst); 260 261 int runs = sz.width <= 320 ? 100 : 5; 262 TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn); 263 264 #if defined(__APPLE__) && defined(HAVE_IPP) 265 SANITY_CHECK(dst, _mode == CX_BGRA2HLS_FULL ? 2 : 1); 266 #else 267 SANITY_CHECK(dst, 1); 268 #endif 269 } 270 271 typedef std::tr1::tuple<Size, CvtModeBayer> Size_CvtMode_Bayer_t; 272 typedef perf::TestBaseWithParam<Size_CvtMode_Bayer_t> Size_CvtMode_Bayer; 273 274 PERF_TEST_P(Size_CvtMode_Bayer, cvtColorBayer8u, 275 testing::Combine( 276 testing::Values(::perf::szODD, ::perf::szVGA), 277 CvtModeBayer::all() 278 ) 279 ) 280 { 281 Size sz = get<0>(GetParam()); 282 int mode = get<1>(GetParam()); 283 ChPair ch = getConversionInfo(mode); 284 mode %= COLOR_COLORCVT_MAX; 285 286 Mat src(sz, CV_8UC(ch.scn)); 287 Mat dst(sz, CV_8UC(ch.dcn)); 288 289 declare.time(100); 290 declare.in(src, WARMUP_RNG).out(dst); 291 292 TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn); 293 294 SANITY_CHECK(dst, 1); 295 } 296 297 typedef std::tr1::tuple<Size, CvtMode2> Size_CvtMode2_t; 298 typedef perf::TestBaseWithParam<Size_CvtMode2_t> Size_CvtMode2; 299 300 PERF_TEST_P(Size_CvtMode2, cvtColorYUV420, 301 testing::Combine( 302 testing::Values(szVGA, sz1080p, Size(130, 60)), 303 CvtMode2::all() 304 ) 305 ) 306 { 307 Size sz = get<0>(GetParam()); 308 int mode = get<1>(GetParam()); 309 ChPair ch = getConversionInfo(mode); 310 311 Mat src(sz.height + sz.height / 2, sz.width, CV_8UC(ch.scn)); 312 Mat dst(sz, CV_8UC(ch.dcn)); 313 314 declare.in(src, WARMUP_RNG).out(dst); 315 316 int runs = (sz.width <= 640) ? 8 : 1; 317 TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn); 318 319 SANITY_CHECK(dst, 1); 320 } 321 322 typedef std::tr1::tuple<Size, CvtMode3> Size_CvtMode3_t; 323 typedef perf::TestBaseWithParam<Size_CvtMode3_t> Size_CvtMode3; 324 325 PERF_TEST_P(Size_CvtMode3, cvtColorRGB2YUV420p, 326 testing::Combine( 327 testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)), 328 CvtMode3::all() 329 ) 330 ) 331 { 332 Size sz = get<0>(GetParam()); 333 int mode = get<1>(GetParam()); 334 ChPair ch = getConversionInfo(mode); 335 336 Mat src(sz, CV_8UC(ch.scn)); 337 Mat dst(sz.height + sz.height / 2, sz.width, CV_8UC(ch.dcn)); 338 339 declare.time(100); 340 declare.in(src, WARMUP_RNG).out(dst); 341 342 int runs = (sz.width <= 640) ? 10 : 1; 343 TEST_CYCLE_MULTIRUN(runs) cvtColor(src, dst, mode, ch.dcn); 344 345 SANITY_CHECK(dst, 1); 346 } 347 348 CV_ENUM(EdgeAwareBayerMode, COLOR_BayerBG2BGR_EA, COLOR_BayerGB2BGR_EA, COLOR_BayerRG2BGR_EA, COLOR_BayerGR2BGR_EA) 349 350 typedef std::tr1::tuple<Size, EdgeAwareBayerMode> EdgeAwareParams; 351 typedef perf::TestBaseWithParam<EdgeAwareParams> EdgeAwareDemosaicingTest; 352 353 PERF_TEST_P(EdgeAwareDemosaicingTest, demosaicingEA, 354 testing::Combine( 355 testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)), 356 EdgeAwareBayerMode::all() 357 ) 358 ) 359 { 360 Size sz = get<0>(GetParam()); 361 int mode = get<1>(GetParam()); 362 363 Mat src(sz, CV_8UC1); 364 Mat dst(sz, CV_8UC3); 365 366 declare.in(src, WARMUP_RNG).out(dst); 367 368 TEST_CYCLE() cvtColor(src, dst, mode, 3); 369 370 SANITY_CHECK(dst, 1); 371 } 372