Added color YUV422 perf test
authorDaniil Osokin <daniil.osokin@itseez.com>
Fri, 10 Aug 2012 11:32:15 +0000 (15:32 +0400)
committerDaniil Osokin <daniil.osokin@itseez.com>
Fri, 10 Aug 2012 11:32:15 +0000 (15:32 +0400)
modules/imgproc/perf/perf_cvt_color.cpp
modules/imgproc/perf/perf_warp.cpp

index 123904e..42914fb 100644 (file)
-#include "perf_precomp.hpp"\r
-\r
-using namespace std;\r
-using namespace cv;\r
-using namespace perf;\r
-using std::tr1::make_tuple;\r
-using std::tr1::get;\r
-\r
-//extra color conversions supported implicitly\r
-enum\r
-{\r
-    CX_BGRA2HLS      = CV_COLORCVT_MAX + CV_BGR2HLS,\r
-    CX_BGRA2HLS_FULL = CV_COLORCVT_MAX + CV_BGR2HLS_FULL,\r
-    CX_BGRA2HSV      = CV_COLORCVT_MAX + CV_BGR2HSV,\r
-    CX_BGRA2HSV_FULL = CV_COLORCVT_MAX + CV_BGR2HSV_FULL,\r
-    CX_BGRA2Lab      = CV_COLORCVT_MAX + CV_BGR2Lab,\r
-    CX_BGRA2Luv      = CV_COLORCVT_MAX + CV_BGR2Luv,\r
-    CX_BGRA2XYZ      = CV_COLORCVT_MAX + CV_BGR2XYZ,\r
-    CX_BGRA2YCrCb    = CV_COLORCVT_MAX + CV_BGR2YCrCb,\r
-    CX_BGRA2YUV      = CV_COLORCVT_MAX + CV_BGR2YUV,\r
-    CX_HLS2BGRA      = CV_COLORCVT_MAX + CV_HLS2BGR,\r
-    CX_HLS2BGRA_FULL = CV_COLORCVT_MAX + CV_HLS2BGR_FULL,\r
-    CX_HLS2RGBA      = CV_COLORCVT_MAX + CV_HLS2RGB,\r
-    CX_HLS2RGBA_FULL = CV_COLORCVT_MAX + CV_HLS2RGB_FULL,\r
-    CX_HSV2BGRA      = CV_COLORCVT_MAX + CV_HSV2BGR,\r
-    CX_HSV2BGRA_FULL = CV_COLORCVT_MAX + CV_HSV2BGR_FULL,\r
-    CX_HSV2RGBA      = CV_COLORCVT_MAX + CV_HSV2RGB,\r
-    CX_HSV2RGBA_FULL = CV_COLORCVT_MAX + CV_HSV2RGB_FULL,\r
-    CX_Lab2BGRA      = CV_COLORCVT_MAX + CV_Lab2BGR,\r
-    CX_Lab2LBGRA     = CV_COLORCVT_MAX + CV_Lab2LBGR,\r
-    CX_Lab2LRGBA     = CV_COLORCVT_MAX + CV_Lab2LRGB,\r
-    CX_Lab2RGBA      = CV_COLORCVT_MAX + CV_Lab2RGB,\r
-    CX_LBGRA2Lab     = CV_COLORCVT_MAX + CV_LBGR2Lab,\r
-    CX_LBGRA2Luv     = CV_COLORCVT_MAX + CV_LBGR2Luv,\r
-    CX_LRGBA2Lab     = CV_COLORCVT_MAX + CV_LRGB2Lab,\r
-    CX_LRGBA2Luv     = CV_COLORCVT_MAX + CV_LRGB2Luv,\r
-    CX_Luv2BGRA      = CV_COLORCVT_MAX + CV_Luv2BGR,\r
-    CX_Luv2LBGRA     = CV_COLORCVT_MAX + CV_Luv2LBGR,\r
-    CX_Luv2LRGBA     = CV_COLORCVT_MAX + CV_Luv2LRGB,\r
-    CX_Luv2RGBA      = CV_COLORCVT_MAX + CV_Luv2RGB,\r
-    CX_RGBA2HLS      = CV_COLORCVT_MAX + CV_RGB2HLS,\r
-    CX_RGBA2HLS_FULL = CV_COLORCVT_MAX + CV_RGB2HLS_FULL,\r
-    CX_RGBA2HSV      = CV_COLORCVT_MAX + CV_RGB2HSV,\r
-    CX_RGBA2HSV_FULL = CV_COLORCVT_MAX + CV_RGB2HSV_FULL,\r
-    CX_RGBA2Lab      = CV_COLORCVT_MAX + CV_RGB2Lab,\r
-    CX_RGBA2Luv      = CV_COLORCVT_MAX + CV_RGB2Luv,\r
-    CX_RGBA2XYZ      = CV_COLORCVT_MAX + CV_RGB2XYZ,\r
-    CX_RGBA2YCrCb    = CV_COLORCVT_MAX + CV_RGB2YCrCb,\r
-    CX_RGBA2YUV      = CV_COLORCVT_MAX + CV_RGB2YUV,\r
-    CX_XYZ2BGRA      = CV_COLORCVT_MAX + CV_XYZ2BGR,\r
-    CX_XYZ2RGBA      = CV_COLORCVT_MAX + CV_XYZ2RGB,\r
-    CX_YCrCb2BGRA    = CV_COLORCVT_MAX + CV_YCrCb2BGR,\r
-    CX_YCrCb2RGBA    = CV_COLORCVT_MAX + CV_YCrCb2RGB,\r
-    CX_YUV2BGRA      = CV_COLORCVT_MAX + CV_YUV2BGR,\r
-    CX_YUV2RGBA      = CV_COLORCVT_MAX + CV_YUV2RGB\r
-};\r
-\r
-CV_ENUM(CvtMode,\r
-    CV_BayerBG2BGR, CV_BayerBG2BGR_VNG, CV_BayerBG2GRAY,\r
-    CV_BayerGB2BGR, CV_BayerGB2BGR_VNG, CV_BayerGB2GRAY,\r
-    CV_BayerGR2BGR, CV_BayerGR2BGR_VNG, CV_BayerGR2GRAY,\r
-    CV_BayerRG2BGR, CV_BayerRG2BGR_VNG, CV_BayerRG2GRAY,\r
-\r
-    CV_BGR2BGR555, CV_BGR2BGR565, CV_BGR2BGRA, CV_BGR2GRAY,\r
-    CV_BGR2HLS, CV_BGR2HLS_FULL, CV_BGR2HSV, CV_BGR2HSV_FULL,\r
-    CV_BGR2Lab, CV_BGR2Luv, CV_BGR2RGB, CV_BGR2RGBA, CV_BGR2XYZ,\r
-    CV_BGR2YCrCb, CV_BGR2YUV, CV_BGR5552BGR, CV_BGR5552BGRA,\r
-\r
-    CV_BGR5552GRAY, CV_BGR5552RGB, CV_BGR5552RGBA, CV_BGR5652BGR,\r
-    CV_BGR5652BGRA, CV_BGR5652GRAY, CV_BGR5652RGB, CV_BGR5652RGBA,\r
-\r
-    CV_BGRA2BGR, CV_BGRA2BGR555, CV_BGRA2BGR565, CV_BGRA2GRAY, CV_BGRA2RGBA,\r
-    CX_BGRA2HLS, CX_BGRA2HLS_FULL, CX_BGRA2HSV, CX_BGRA2HSV_FULL,\r
-    CX_BGRA2Lab, CX_BGRA2Luv, CX_BGRA2XYZ,\r
-    CX_BGRA2YCrCb, CX_BGRA2YUV,\r
-\r
-    CV_GRAY2BGR, CV_GRAY2BGR555, CV_GRAY2BGR565, CV_GRAY2BGRA,\r
-\r
-    CV_HLS2BGR, CV_HLS2BGR_FULL, CV_HLS2RGB, CV_HLS2RGB_FULL,\r
-    CX_HLS2BGRA, CX_HLS2BGRA_FULL, CX_HLS2RGBA, CX_HLS2RGBA_FULL,\r
-\r
-    CV_HSV2BGR, CV_HSV2BGR_FULL, CV_HSV2RGB, CV_HSV2RGB_FULL,\r
-    CX_HSV2BGRA, CX_HSV2BGRA_FULL, CX_HSV2RGBA,    CX_HSV2RGBA_FULL,\r
-\r
-    CV_Lab2BGR, CV_Lab2LBGR, CV_Lab2LRGB, CV_Lab2RGB,\r
-    CX_Lab2BGRA, CX_Lab2LBGRA, CX_Lab2LRGBA, CX_Lab2RGBA,\r
-\r
-    CV_LBGR2Lab, CV_LBGR2Luv, CV_LRGB2Lab, CV_LRGB2Luv,\r
-    CX_LBGRA2Lab, CX_LBGRA2Luv, CX_LRGBA2Lab, CX_LRGBA2Luv,\r
-\r
-    CV_Luv2BGR, CV_Luv2LBGR, CV_Luv2LRGB, CV_Luv2RGB,\r
-    CX_Luv2BGRA, CX_Luv2LBGRA, CX_Luv2LRGBA, CX_Luv2RGBA,\r
-\r
-    CV_RGB2BGR555, CV_RGB2BGR565, CV_RGB2GRAY,\r
-    CV_RGB2HLS, CV_RGB2HLS_FULL, CV_RGB2HSV, CV_RGB2HSV_FULL,\r
-    CV_RGB2Lab, CV_RGB2Luv, CV_RGB2XYZ, CV_RGB2YCrCb, CV_RGB2YUV,\r
-\r
-    CV_RGBA2BGR, CV_RGBA2BGR555, CV_RGBA2BGR565, CV_RGBA2GRAY,\r
-    CX_RGBA2HLS, CX_RGBA2HLS_FULL, CX_RGBA2HSV, CX_RGBA2HSV_FULL,\r
-    CX_RGBA2Lab, CX_RGBA2Luv, CX_RGBA2XYZ,\r
-    CX_RGBA2YCrCb, CX_RGBA2YUV,\r
-\r
-    CV_XYZ2BGR, CV_XYZ2RGB, CX_XYZ2BGRA, CX_XYZ2RGBA,\r
-\r
-    CV_YCrCb2BGR, CV_YCrCb2RGB, CX_YCrCb2BGRA, CX_YCrCb2RGBA,\r
-    CV_YUV2BGR, CV_YUV2RGB, CX_YUV2BGRA, CX_YUV2RGBA\r
-    )\r
-\r
-CV_ENUM(CvtMode2, CV_YUV2BGR_NV12, CV_YUV2BGRA_NV12, CV_YUV2RGB_NV12, CV_YUV2RGBA_NV12, CV_YUV2BGR_NV21, CV_YUV2BGRA_NV21, CV_YUV2RGB_NV21, CV_YUV2RGBA_NV21,\r
-                  CV_YUV2BGR_YV12, CV_YUV2BGRA_YV12, CV_YUV2RGB_YV12, CV_YUV2RGBA_YV12, CV_YUV2BGR_IYUV, CV_YUV2BGRA_IYUV, CV_YUV2RGB_IYUV, CV_YUV2RGBA_IYUV,\r
-                  COLOR_YUV2GRAY_420)\r
-\r
-struct ChPair\r
-{\r
-    ChPair(int _scn, int _dcn): scn(_scn), dcn(_dcn) {}\r
-    int scn, dcn;\r
-};\r
-\r
-ChPair getConversionInfo(int cvtMode)\r
-{\r
-    switch(cvtMode)\r
-    {\r
-    case CV_BayerBG2GRAY: case CV_BayerGB2GRAY:\r
-    case CV_BayerGR2GRAY: case CV_BayerRG2GRAY:\r
-    case CV_YUV2GRAY_420:\r
-        return ChPair(1,1);\r
-    case CV_GRAY2BGR555: case CV_GRAY2BGR565:\r
-        return ChPair(1,2);\r
-    case CV_BayerBG2BGR: case CV_BayerBG2BGR_VNG:\r
-    case CV_BayerGB2BGR: case CV_BayerGB2BGR_VNG:\r
-    case CV_BayerGR2BGR: case CV_BayerGR2BGR_VNG:\r
-    case CV_BayerRG2BGR: case CV_BayerRG2BGR_VNG:\r
-    case CV_GRAY2BGR:\r
-    case CV_YUV2BGR_NV12: case CV_YUV2RGB_NV12:\r
-    case CV_YUV2BGR_NV21: case CV_YUV2RGB_NV21:\r
-    case CV_YUV2BGR_YV12: case CV_YUV2RGB_YV12:\r
-    case CV_YUV2BGR_IYUV: case CV_YUV2RGB_IYUV:\r
-        return ChPair(1,3);\r
-    case CV_GRAY2BGRA:\r
-    case CV_YUV2BGRA_NV12: case CV_YUV2RGBA_NV12:\r
-    case CV_YUV2BGRA_NV21: case CV_YUV2RGBA_NV21:\r
-    case CV_YUV2BGRA_YV12: case CV_YUV2RGBA_YV12:\r
-    case CV_YUV2BGRA_IYUV: case CV_YUV2RGBA_IYUV:\r
-        return ChPair(1,4);\r
-    case CV_BGR5552GRAY: case CV_BGR5652GRAY:\r
-        return ChPair(2,1);\r
-    case CV_BGR5552BGR: case CV_BGR5552RGB:\r
-    case CV_BGR5652BGR: case CV_BGR5652RGB:\r
-        return ChPair(2,3);\r
-    case CV_BGR5552BGRA: case CV_BGR5552RGBA:\r
-    case CV_BGR5652BGRA: case CV_BGR5652RGBA:\r
-        return ChPair(2,4);\r
-    case CV_BGR2GRAY: case CV_RGB2GRAY:\r
-        return ChPair(3,1);\r
-    case CV_BGR2BGR555: case CV_BGR2BGR565:\r
-    case CV_RGB2BGR555: case CV_RGB2BGR565:\r
-        return ChPair(3,2);\r
-    case CV_BGR2HLS: case CV_BGR2HLS_FULL:\r
-    case CV_BGR2HSV: case CV_BGR2HSV_FULL:\r
-    case CV_BGR2Lab: case CV_BGR2Luv:\r
-    case CV_BGR2RGB: case CV_BGR2XYZ:\r
-    case CV_BGR2YCrCb: case CV_BGR2YUV:\r
-    case CV_HLS2BGR: case CV_HLS2BGR_FULL:\r
-    case CV_HLS2RGB: case CV_HLS2RGB_FULL:\r
-    case CV_HSV2BGR: case CV_HSV2BGR_FULL:\r
-    case CV_HSV2RGB: case CV_HSV2RGB_FULL:\r
-    case CV_Lab2BGR: case CV_Lab2LBGR:\r
-    case CV_Lab2LRGB: case CV_Lab2RGB:\r
-    case CV_LBGR2Lab: case CV_LBGR2Luv:\r
-    case CV_LRGB2Lab: case CV_LRGB2Luv:\r
-    case CV_Luv2BGR: case CV_Luv2LBGR:\r
-    case CV_Luv2LRGB: case CV_Luv2RGB:\r
-    case CV_RGB2HLS: case CV_RGB2HLS_FULL:\r
-    case CV_RGB2HSV: case CV_RGB2HSV_FULL:\r
-    case CV_RGB2Lab: case CV_RGB2Luv:\r
-    case CV_RGB2XYZ: case CV_RGB2YCrCb:\r
-    case CV_RGB2YUV: case CV_XYZ2BGR:\r
-    case CV_XYZ2RGB: case CV_YCrCb2BGR:\r
-    case CV_YCrCb2RGB: case CV_YUV2BGR:\r
-    case CV_YUV2RGB:\r
-        return ChPair(3,3);\r
-    case CV_BGR2BGRA: case CV_BGR2RGBA:\r
-    case CX_HLS2BGRA: case CX_HLS2BGRA_FULL:\r
-    case CX_HLS2RGBA: case CX_HLS2RGBA_FULL:\r
-    case CX_HSV2BGRA: case CX_HSV2BGRA_FULL:\r
-    case CX_HSV2RGBA: case CX_HSV2RGBA_FULL:\r
-    case CX_Lab2BGRA: case CX_Lab2LBGRA:\r
-    case CX_Lab2LRGBA: case CX_Lab2RGBA:\r
-    case CX_Luv2BGRA: case CX_Luv2LBGRA:\r
-    case CX_Luv2LRGBA: case CX_Luv2RGBA:\r
-    case CX_XYZ2BGRA: case CX_XYZ2RGBA:\r
-    case CX_YCrCb2BGRA: case CX_YCrCb2RGBA:\r
-    case CX_YUV2BGRA: case CX_YUV2RGBA:\r
-        return ChPair(3,4);\r
-    case CV_BGRA2GRAY: case CV_RGBA2GRAY:\r
-        return ChPair(4,1);\r
-    case CV_BGRA2BGR555: case CV_BGRA2BGR565:\r
-    case CV_RGBA2BGR555: case CV_RGBA2BGR565:\r
-        return ChPair(4,2);\r
-    case CV_BGRA2BGR: case CX_BGRA2HLS:\r
-    case CX_BGRA2HLS_FULL: case CX_BGRA2HSV:\r
-    case CX_BGRA2HSV_FULL: case CX_BGRA2Lab:\r
-    case CX_BGRA2Luv: case CX_BGRA2XYZ:\r
-    case CX_BGRA2YCrCb: case CX_BGRA2YUV:\r
-    case CX_LBGRA2Lab: case CX_LBGRA2Luv:\r
-    case CX_LRGBA2Lab: case CX_LRGBA2Luv:\r
-    case CV_RGBA2BGR: case CX_RGBA2HLS:\r
-    case CX_RGBA2HLS_FULL: case CX_RGBA2HSV:\r
-    case CX_RGBA2HSV_FULL: case CX_RGBA2Lab:\r
-    case CX_RGBA2Luv: case CX_RGBA2XYZ:\r
-    case CX_RGBA2YCrCb: case CX_RGBA2YUV:\r
-        return ChPair(4,3);\r
-    case CV_BGRA2RGBA:\r
-        return ChPair(4,4);\r
-    default:\r
-        ADD_FAILURE() << "Unknown conversion type";\r
-        break;\r
-    };\r
-    return ChPair(0,0);\r
-}\r
-\r
-typedef std::tr1::tuple<Size, CvtMode> Size_CvtMode_t;\r
-typedef perf::TestBaseWithParam<Size_CvtMode_t> Size_CvtMode;\r
-\r
-PERF_TEST_P(Size_CvtMode, cvtColor8u,\r
-            testing::Combine(\r
-                testing::Values(TYPICAL_MAT_SIZES),\r
-                testing::ValuesIn(CvtMode::all())\r
-                )\r
-            )\r
-{\r
-    Size sz = get<0>(GetParam());\r
-    int mode = get<1>(GetParam());\r
-    ChPair ch = getConversionInfo(mode);\r
-    mode %= CV_COLORCVT_MAX;\r
-\r
-    Mat src(sz, CV_8UC(ch.scn));\r
-    Mat dst(sz, CV_8UC(ch.dcn));\r
-\r
-    declare.in(src, WARMUP_RNG).out(dst);\r
-\r
-    TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);\r
-\r
-    SANITY_CHECK(dst, 1);\r
-}\r
-\r
-typedef std::tr1::tuple<Size, CvtMode2> Size_CvtMode2_t;\r
-typedef perf::TestBaseWithParam<Size_CvtMode2_t> Size_CvtMode2;\r
-\r
-PERF_TEST_P(Size_CvtMode2, cvtColorYUV420,\r
-            testing::Combine(\r
-                testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),\r
-                testing::ValuesIn(CvtMode2::all())\r
-                )\r
-            )\r
-{\r
-    Size sz = get<0>(GetParam());\r
-    int mode = get<1>(GetParam());\r
-    ChPair ch = getConversionInfo(mode);\r
-\r
-    Mat src(sz.height + sz.height / 2, sz.width, CV_8UC(ch.scn));\r
-    Mat dst(sz, CV_8UC(ch.dcn));\r
-\r
-    declare.in(src, WARMUP_RNG).out(dst);\r
-\r
-    TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);\r
-\r
-    SANITY_CHECK(dst, 1);\r
-}\r
+#include "perf_precomp.hpp"
+
+using namespace std;
+using namespace cv;
+using namespace perf;
+using std::tr1::make_tuple;
+using std::tr1::get;
+
+//extra color conversions supported implicitly
+enum
+{
+    CX_BGRA2HLS      = CV_COLORCVT_MAX + CV_BGR2HLS,
+    CX_BGRA2HLS_FULL = CV_COLORCVT_MAX + CV_BGR2HLS_FULL,
+    CX_BGRA2HSV      = CV_COLORCVT_MAX + CV_BGR2HSV,
+    CX_BGRA2HSV_FULL = CV_COLORCVT_MAX + CV_BGR2HSV_FULL,
+    CX_BGRA2Lab      = CV_COLORCVT_MAX + CV_BGR2Lab,
+    CX_BGRA2Luv      = CV_COLORCVT_MAX + CV_BGR2Luv,
+    CX_BGRA2XYZ      = CV_COLORCVT_MAX + CV_BGR2XYZ,
+    CX_BGRA2YCrCb    = CV_COLORCVT_MAX + CV_BGR2YCrCb,
+    CX_BGRA2YUV      = CV_COLORCVT_MAX + CV_BGR2YUV,
+    CX_HLS2BGRA      = CV_COLORCVT_MAX + CV_HLS2BGR,
+    CX_HLS2BGRA_FULL = CV_COLORCVT_MAX + CV_HLS2BGR_FULL,
+    CX_HLS2RGBA      = CV_COLORCVT_MAX + CV_HLS2RGB,
+    CX_HLS2RGBA_FULL = CV_COLORCVT_MAX + CV_HLS2RGB_FULL,
+    CX_HSV2BGRA      = CV_COLORCVT_MAX + CV_HSV2BGR,
+    CX_HSV2BGRA_FULL = CV_COLORCVT_MAX + CV_HSV2BGR_FULL,
+    CX_HSV2RGBA      = CV_COLORCVT_MAX + CV_HSV2RGB,
+    CX_HSV2RGBA_FULL = CV_COLORCVT_MAX + CV_HSV2RGB_FULL,
+    CX_Lab2BGRA      = CV_COLORCVT_MAX + CV_Lab2BGR,
+    CX_Lab2LBGRA     = CV_COLORCVT_MAX + CV_Lab2LBGR,
+    CX_Lab2LRGBA     = CV_COLORCVT_MAX + CV_Lab2LRGB,
+    CX_Lab2RGBA      = CV_COLORCVT_MAX + CV_Lab2RGB,
+    CX_LBGRA2Lab     = CV_COLORCVT_MAX + CV_LBGR2Lab,
+    CX_LBGRA2Luv     = CV_COLORCVT_MAX + CV_LBGR2Luv,
+    CX_LRGBA2Lab     = CV_COLORCVT_MAX + CV_LRGB2Lab,
+    CX_LRGBA2Luv     = CV_COLORCVT_MAX + CV_LRGB2Luv,
+    CX_Luv2BGRA      = CV_COLORCVT_MAX + CV_Luv2BGR,
+    CX_Luv2LBGRA     = CV_COLORCVT_MAX + CV_Luv2LBGR,
+    CX_Luv2LRGBA     = CV_COLORCVT_MAX + CV_Luv2LRGB,
+    CX_Luv2RGBA      = CV_COLORCVT_MAX + CV_Luv2RGB,
+    CX_RGBA2HLS      = CV_COLORCVT_MAX + CV_RGB2HLS,
+    CX_RGBA2HLS_FULL = CV_COLORCVT_MAX + CV_RGB2HLS_FULL,
+    CX_RGBA2HSV      = CV_COLORCVT_MAX + CV_RGB2HSV,
+    CX_RGBA2HSV_FULL = CV_COLORCVT_MAX + CV_RGB2HSV_FULL,
+    CX_RGBA2Lab      = CV_COLORCVT_MAX + CV_RGB2Lab,
+    CX_RGBA2Luv      = CV_COLORCVT_MAX + CV_RGB2Luv,
+    CX_RGBA2XYZ      = CV_COLORCVT_MAX + CV_RGB2XYZ,
+    CX_RGBA2YCrCb    = CV_COLORCVT_MAX + CV_RGB2YCrCb,
+    CX_RGBA2YUV      = CV_COLORCVT_MAX + CV_RGB2YUV,
+    CX_XYZ2BGRA      = CV_COLORCVT_MAX + CV_XYZ2BGR,
+    CX_XYZ2RGBA      = CV_COLORCVT_MAX + CV_XYZ2RGB,
+    CX_YCrCb2BGRA    = CV_COLORCVT_MAX + CV_YCrCb2BGR,
+    CX_YCrCb2RGBA    = CV_COLORCVT_MAX + CV_YCrCb2RGB,
+    CX_YUV2BGRA      = CV_COLORCVT_MAX + CV_YUV2BGR,
+    CX_YUV2RGBA      = CV_COLORCVT_MAX + CV_YUV2RGB
+};
+
+CV_ENUM(CvtMode,
+    CV_BayerBG2BGR, CV_BayerBG2BGR_VNG, CV_BayerBG2GRAY,
+    CV_BayerGB2BGR, CV_BayerGB2BGR_VNG, CV_BayerGB2GRAY,
+    CV_BayerGR2BGR, CV_BayerGR2BGR_VNG, CV_BayerGR2GRAY,
+    CV_BayerRG2BGR, CV_BayerRG2BGR_VNG, CV_BayerRG2GRAY,
+
+    CV_BGR2BGR555, CV_BGR2BGR565, CV_BGR2BGRA, CV_BGR2GRAY,
+    CV_BGR2HLS, CV_BGR2HLS_FULL, CV_BGR2HSV, CV_BGR2HSV_FULL,
+    CV_BGR2Lab, CV_BGR2Luv, CV_BGR2RGB, CV_BGR2RGBA, CV_BGR2XYZ,
+    CV_BGR2YCrCb, CV_BGR2YUV, CV_BGR5552BGR, CV_BGR5552BGRA,
+
+    CV_BGR5552GRAY, CV_BGR5552RGB, CV_BGR5552RGBA, CV_BGR5652BGR,
+    CV_BGR5652BGRA, CV_BGR5652GRAY, CV_BGR5652RGB, CV_BGR5652RGBA,
+
+    CV_BGRA2BGR, CV_BGRA2BGR555, CV_BGRA2BGR565, CV_BGRA2GRAY, CV_BGRA2RGBA,
+    CX_BGRA2HLS, CX_BGRA2HLS_FULL, CX_BGRA2HSV, CX_BGRA2HSV_FULL,
+    CX_BGRA2Lab, CX_BGRA2Luv, CX_BGRA2XYZ,
+    CX_BGRA2YCrCb, CX_BGRA2YUV,
+
+    CV_GRAY2BGR, CV_GRAY2BGR555, CV_GRAY2BGR565, CV_GRAY2BGRA,
+
+    CV_HLS2BGR, CV_HLS2BGR_FULL, CV_HLS2RGB, CV_HLS2RGB_FULL,
+    CX_HLS2BGRA, CX_HLS2BGRA_FULL, CX_HLS2RGBA, CX_HLS2RGBA_FULL,
+
+    CV_HSV2BGR, CV_HSV2BGR_FULL, CV_HSV2RGB, CV_HSV2RGB_FULL,
+    CX_HSV2BGRA, CX_HSV2BGRA_FULL, CX_HSV2RGBA,    CX_HSV2RGBA_FULL,
+
+    CV_Lab2BGR, CV_Lab2LBGR, CV_Lab2LRGB, CV_Lab2RGB,
+    CX_Lab2BGRA, CX_Lab2LBGRA, CX_Lab2LRGBA, CX_Lab2RGBA,
+
+    CV_LBGR2Lab, CV_LBGR2Luv, CV_LRGB2Lab, CV_LRGB2Luv,
+    CX_LBGRA2Lab, CX_LBGRA2Luv, CX_LRGBA2Lab, CX_LRGBA2Luv,
+
+    CV_Luv2BGR, CV_Luv2LBGR, CV_Luv2LRGB, CV_Luv2RGB,
+    CX_Luv2BGRA, CX_Luv2LBGRA, CX_Luv2LRGBA, CX_Luv2RGBA,
+
+    CV_RGB2BGR555, CV_RGB2BGR565, CV_RGB2GRAY,
+    CV_RGB2HLS, CV_RGB2HLS_FULL, CV_RGB2HSV, CV_RGB2HSV_FULL,
+    CV_RGB2Lab, CV_RGB2Luv, CV_RGB2XYZ, CV_RGB2YCrCb, CV_RGB2YUV,
+
+    CV_RGBA2BGR, CV_RGBA2BGR555, CV_RGBA2BGR565, CV_RGBA2GRAY,
+    CX_RGBA2HLS, CX_RGBA2HLS_FULL, CX_RGBA2HSV, CX_RGBA2HSV_FULL,
+    CX_RGBA2Lab, CX_RGBA2Luv, CX_RGBA2XYZ,
+    CX_RGBA2YCrCb, CX_RGBA2YUV,
+
+    CV_XYZ2BGR, CV_XYZ2RGB, CX_XYZ2BGRA, CX_XYZ2RGBA,
+
+    CV_YCrCb2BGR, CV_YCrCb2RGB, CX_YCrCb2BGRA, CX_YCrCb2RGBA,
+    CV_YUV2BGR, CV_YUV2RGB, CX_YUV2BGRA, CX_YUV2RGBA
+    )
+
+CV_ENUM(CvtMode2, CV_YUV2BGR_NV12, CV_YUV2BGRA_NV12, CV_YUV2RGB_NV12, CV_YUV2RGBA_NV12, CV_YUV2BGR_NV21, CV_YUV2BGRA_NV21, CV_YUV2RGB_NV21, CV_YUV2RGBA_NV21,
+                  CV_YUV2BGR_YV12, CV_YUV2BGRA_YV12, CV_YUV2RGB_YV12, CV_YUV2RGBA_YV12, CV_YUV2BGR_IYUV, CV_YUV2BGRA_IYUV, CV_YUV2RGB_IYUV, CV_YUV2RGBA_IYUV,
+                  COLOR_YUV2GRAY_420, CV_YUV2RGB_UYVY, CV_YUV2BGR_UYVY, CV_YUV2RGBA_UYVY, CV_YUV2BGRA_UYVY, CV_YUV2RGB_YUY2, CV_YUV2BGR_YUY2, CV_YUV2RGB_YVYU,
+                  CV_YUV2BGR_YVYU, CV_YUV2RGBA_YUY2, CV_YUV2BGRA_YUY2, CV_YUV2RGBA_YVYU, CV_YUV2BGRA_YVYU)
+
+struct ChPair
+{
+    ChPair(int _scn, int _dcn): scn(_scn), dcn(_dcn) {}
+    int scn, dcn;
+};
+
+ChPair getConversionInfo(int cvtMode)
+{
+    switch(cvtMode)
+    {
+    case CV_BayerBG2GRAY: case CV_BayerGB2GRAY:
+    case CV_BayerGR2GRAY: case CV_BayerRG2GRAY:
+    case CV_YUV2GRAY_420:
+        return ChPair(1,1);
+    case CV_GRAY2BGR555: case CV_GRAY2BGR565:
+        return ChPair(1,2);
+    case CV_BayerBG2BGR: case CV_BayerBG2BGR_VNG:
+    case CV_BayerGB2BGR: case CV_BayerGB2BGR_VNG:
+    case CV_BayerGR2BGR: case CV_BayerGR2BGR_VNG:
+    case CV_BayerRG2BGR: case CV_BayerRG2BGR_VNG:
+    case CV_GRAY2BGR:
+    case CV_YUV2BGR_NV12: case CV_YUV2RGB_NV12:
+    case CV_YUV2BGR_NV21: case CV_YUV2RGB_NV21:
+    case CV_YUV2BGR_YV12: case CV_YUV2RGB_YV12:
+    case CV_YUV2BGR_IYUV: case CV_YUV2RGB_IYUV:
+        return ChPair(1,3);
+    case CV_GRAY2BGRA:
+    case CV_YUV2BGRA_NV12: case CV_YUV2RGBA_NV12:
+    case CV_YUV2BGRA_NV21: case CV_YUV2RGBA_NV21:
+    case CV_YUV2BGRA_YV12: case CV_YUV2RGBA_YV12:
+    case CV_YUV2BGRA_IYUV: case CV_YUV2RGBA_IYUV:
+        return ChPair(1,4);
+    case CV_BGR5552GRAY: case CV_BGR5652GRAY:
+        return ChPair(2,1);
+    case CV_BGR5552BGR: case CV_BGR5552RGB:
+    case CV_BGR5652BGR: case CV_BGR5652RGB:
+    case CV_YUV2RGB_UYVY: case CV_YUV2BGR_UYVY:
+    case CV_YUV2RGBA_UYVY: case CV_YUV2BGRA_UYVY:
+    case CV_YUV2RGB_YUY2: case CV_YUV2BGR_YUY2:
+    case CV_YUV2RGB_YVYU: case CV_YUV2BGR_YVYU:
+    case CV_YUV2RGBA_YUY2: case CV_YUV2BGRA_YUY2:
+    case CV_YUV2RGBA_YVYU: case CV_YUV2BGRA_YVYU:
+        return ChPair(2,3);
+    case CV_BGR5552BGRA: case CV_BGR5552RGBA:
+    case CV_BGR5652BGRA: case CV_BGR5652RGBA:
+        return ChPair(2,4);
+    case CV_BGR2GRAY: case CV_RGB2GRAY:
+        return ChPair(3,1);
+    case CV_BGR2BGR555: case CV_BGR2BGR565:
+    case CV_RGB2BGR555: case CV_RGB2BGR565:
+        return ChPair(3,2);
+    case CV_BGR2HLS: case CV_BGR2HLS_FULL:
+    case CV_BGR2HSV: case CV_BGR2HSV_FULL:
+    case CV_BGR2Lab: case CV_BGR2Luv:
+    case CV_BGR2RGB: case CV_BGR2XYZ:
+    case CV_BGR2YCrCb: case CV_BGR2YUV:
+    case CV_HLS2BGR: case CV_HLS2BGR_FULL:
+    case CV_HLS2RGB: case CV_HLS2RGB_FULL:
+    case CV_HSV2BGR: case CV_HSV2BGR_FULL:
+    case CV_HSV2RGB: case CV_HSV2RGB_FULL:
+    case CV_Lab2BGR: case CV_Lab2LBGR:
+    case CV_Lab2LRGB: case CV_Lab2RGB:
+    case CV_LBGR2Lab: case CV_LBGR2Luv:
+    case CV_LRGB2Lab: case CV_LRGB2Luv:
+    case CV_Luv2BGR: case CV_Luv2LBGR:
+    case CV_Luv2LRGB: case CV_Luv2RGB:
+    case CV_RGB2HLS: case CV_RGB2HLS_FULL:
+    case CV_RGB2HSV: case CV_RGB2HSV_FULL:
+    case CV_RGB2Lab: case CV_RGB2Luv:
+    case CV_RGB2XYZ: case CV_RGB2YCrCb:
+    case CV_RGB2YUV: case CV_XYZ2BGR:
+    case CV_XYZ2RGB: case CV_YCrCb2BGR:
+    case CV_YCrCb2RGB: case CV_YUV2BGR:
+    case CV_YUV2RGB:
+        return ChPair(3,3);
+    case CV_BGR2BGRA: case CV_BGR2RGBA:
+    case CX_HLS2BGRA: case CX_HLS2BGRA_FULL:
+    case CX_HLS2RGBA: case CX_HLS2RGBA_FULL:
+    case CX_HSV2BGRA: case CX_HSV2BGRA_FULL:
+    case CX_HSV2RGBA: case CX_HSV2RGBA_FULL:
+    case CX_Lab2BGRA: case CX_Lab2LBGRA:
+    case CX_Lab2LRGBA: case CX_Lab2RGBA:
+    case CX_Luv2BGRA: case CX_Luv2LBGRA:
+    case CX_Luv2LRGBA: case CX_Luv2RGBA:
+    case CX_XYZ2BGRA: case CX_XYZ2RGBA:
+    case CX_YCrCb2BGRA: case CX_YCrCb2RGBA:
+    case CX_YUV2BGRA: case CX_YUV2RGBA:
+        return ChPair(3,4);
+    case CV_BGRA2GRAY: case CV_RGBA2GRAY:
+        return ChPair(4,1);
+    case CV_BGRA2BGR555: case CV_BGRA2BGR565:
+    case CV_RGBA2BGR555: case CV_RGBA2BGR565:
+        return ChPair(4,2);
+    case CV_BGRA2BGR: case CX_BGRA2HLS:
+    case CX_BGRA2HLS_FULL: case CX_BGRA2HSV:
+    case CX_BGRA2HSV_FULL: case CX_BGRA2Lab:
+    case CX_BGRA2Luv: case CX_BGRA2XYZ:
+    case CX_BGRA2YCrCb: case CX_BGRA2YUV:
+    case CX_LBGRA2Lab: case CX_LBGRA2Luv:
+    case CX_LRGBA2Lab: case CX_LRGBA2Luv:
+    case CV_RGBA2BGR: case CX_RGBA2HLS:
+    case CX_RGBA2HLS_FULL: case CX_RGBA2HSV:
+    case CX_RGBA2HSV_FULL: case CX_RGBA2Lab:
+    case CX_RGBA2Luv: case CX_RGBA2XYZ:
+    case CX_RGBA2YCrCb: case CX_RGBA2YUV:
+        return ChPair(4,3);
+    case CV_BGRA2RGBA:
+        return ChPair(4,4);
+    default:
+        ADD_FAILURE() << "Unknown conversion type";
+        break;
+    };
+    return ChPair(0,0);
+}
+
+typedef std::tr1::tuple<Size, CvtMode> Size_CvtMode_t;
+typedef perf::TestBaseWithParam<Size_CvtMode_t> Size_CvtMode;
+
+PERF_TEST_P(Size_CvtMode, cvtColor8u,
+            testing::Combine(
+                testing::Values(TYPICAL_MAT_SIZES),
+                testing::ValuesIn(CvtMode::all())
+                )
+            )
+{
+    Size sz = get<0>(GetParam());
+    int mode = get<1>(GetParam());
+    ChPair ch = getConversionInfo(mode);
+    mode %= CV_COLORCVT_MAX;
+
+    Mat src(sz, CV_8UC(ch.scn));
+    Mat dst(sz, CV_8UC(ch.dcn));
+
+    declare.in(src, WARMUP_RNG).out(dst);
+
+    TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);
+
+    SANITY_CHECK(dst, 1);
+}
+
+typedef std::tr1::tuple<Size, CvtMode2> Size_CvtMode2_t;
+typedef perf::TestBaseWithParam<Size_CvtMode2_t> Size_CvtMode2;
+
+PERF_TEST_P(Size_CvtMode2, cvtColorYUV420,
+            testing::Combine(
+                testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
+                testing::ValuesIn(CvtMode2::all())
+                )
+            )
+{
+    Size sz = get<0>(GetParam());
+    int mode = get<1>(GetParam());
+    ChPair ch = getConversionInfo(mode);
+
+    Mat src(sz.height + sz.height / 2, sz.width, CV_8UC(ch.scn));
+    Mat dst(sz, CV_8UC(ch.dcn));
+
+    declare.in(src, WARMUP_RNG).out(dst);
+
+    TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);
+
+    SANITY_CHECK(dst, 1);
+}
index 215580e..823ff53 100644 (file)
-#include "perf_precomp.hpp"\r
-\r
-using namespace std;\r
-using namespace cv;\r
-using namespace perf;\r
-using namespace testing;\r
-using std::tr1::make_tuple;\r
-using std::tr1::get;\r
-\r
-enum{HALF_SIZE=0, UPSIDE_DOWN, REFLECTION_X, REFLECTION_BOTH};\r
-\r
-CV_ENUM(BorderMode, BORDER_CONSTANT, BORDER_REPLICATE);\r
-CV_ENUM(InterType, INTER_NEAREST, INTER_LINEAR);\r
-CV_ENUM(RemapMode, HALF_SIZE, UPSIDE_DOWN, REFLECTION_X, REFLECTION_BOTH);\r
-\r
-typedef TestBaseWithParam< tr1::tuple<Size, InterType, BorderMode> > TestWarpAffine;\r
-typedef TestBaseWithParam< tr1::tuple<Size, InterType, BorderMode> > TestWarpPerspective;\r
-typedef TestBaseWithParam< tr1::tuple<MatType, Size, InterType, BorderMode, RemapMode> > TestRemap;\r
-\r
-void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode );\r
-\r
-PERF_TEST_P( TestWarpAffine, WarpAffine,\r
-             Combine(\r
-                Values( szVGA, sz720p, sz1080p ),\r
-                ValuesIn( InterType::all() ),\r
-                ValuesIn( BorderMode::all() )\r
-             )\r
-)\r
-{\r
-    Size sz;\r
-    int borderMode, interType;\r
-    sz         = get<0>(GetParam());\r
-    borderMode = get<1>(GetParam());\r
-    interType  = get<2>(GetParam());\r
-\r
-    Mat src, img = imread(getDataPath("cv/shared/fruits.jpg"));\r
-    cvtColor(img, src, COLOR_BGR2RGBA, 4);\r
-    Mat warpMat = getRotationMatrix2D(Point2f(src.cols/2.f, src.rows/2.f), 30., 2.2);\r
-    Mat dst(sz, CV_8UC4);\r
-\r
-    declare.in(src).out(dst);\r
-\r
-    TEST_CYCLE() warpAffine( src, dst, warpMat, sz, interType, borderMode, Scalar::all(150) );\r
-\r
-    SANITY_CHECK(dst);\r
-\r
-}\r
-\r
-PERF_TEST_P( TestWarpPerspective, WarpPerspective,\r
-             Combine(\r
-                Values( szVGA, sz720p, sz1080p ),\r
-                ValuesIn( InterType::all() ),\r
-                ValuesIn( BorderMode::all() )\r
-             )\r
-)\r
-{\r
-    Size sz;\r
-    int borderMode, interType;\r
-    sz         = get<0>(GetParam());\r
-    borderMode = get<1>(GetParam());\r
-    interType  = get<2>(GetParam());\r
-\r
-\r
-    Mat src, img = imread(getDataPath("cv/shared/fruits.jpg"));\r
-    cvtColor(img, src, COLOR_BGR2RGBA, 4);\r
-    Mat rotMat = getRotationMatrix2D(Point2f(src.cols/2.f, src.rows/2.f), 30., 2.2);\r
-    Mat warpMat(3, 3, CV_64FC1);\r
-    for(int r=0; r<2; r++)\r
-        for(int c=0; c<3; c++)\r
-            warpMat.at<double>(r, c) = rotMat.at<double>(r, c);\r
-    warpMat.at<double>(2, 0) = .3/sz.width;\r
-    warpMat.at<double>(2, 1) = .3/sz.height;\r
-    warpMat.at<double>(2, 2) = 1;\r
-    Mat dst(sz, CV_8UC4);\r
-\r
-    declare.in(src).out(dst);\r
-\r
-    TEST_CYCLE() warpPerspective( src, dst, warpMat, sz, interType, borderMode, Scalar::all(150) );\r
-\r
-    SANITY_CHECK(dst);\r
-}\r
-\r
-PERF_TEST_P( TestRemap, remap,\r
-             Combine(\r
-                 Values( TYPICAL_MAT_TYPES ),\r
-                 Values( szVGA, sz720p, sz1080p ),\r
-                 ValuesIn( InterType::all() ),\r
-                 ValuesIn( BorderMode::all() ),\r
-                 ValuesIn( RemapMode::all() )\r
-                 )\r
-             )\r
-{\r
-    int type = get<0>(GetParam());\r
-    Size size = get<1>(GetParam());\r
-    int interpolationType = get<2>(GetParam());\r
-    int borderMode = get<3>(GetParam());\r
-    int remapMode = get<4>(GetParam());\r
-    unsigned int height = size.height;\r
-    unsigned int width = size.width;\r
-    Mat source(height, width, type);\r
-    Mat destination;\r
-    Mat map_x(height, width, CV_32F);\r
-    Mat map_y(height, width, CV_32F);\r
-\r
-    declare.in(source, WARMUP_RNG);\r
-\r
-    update_map(source, map_x, map_y, remapMode);\r
-\r
-    TEST_CYCLE()\r
-    {\r
-        remap(source, destination, map_x, map_y, interpolationType, borderMode);\r
-    }\r
-\r
-    SANITY_CHECK(destination, 1);\r
-}\r
-\r
-void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode )\r
-{\r
-    for( int j = 0; j < src.rows; j++ )\r
-    {\r
-        for( int i = 0; i < src.cols; i++ )\r
-        {\r
-            switch( remapMode )\r
-            {\r
-            case HALF_SIZE:\r
-                if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )\r
-                {\r
-                    map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;\r
-                    map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;\r
-                }\r
-                else\r
-                {\r
-                    map_x.at<float>(j,i) = 0 ;\r
-                    map_y.at<float>(j,i) = 0 ;\r
-                }\r
-                break;\r
-            case UPSIDE_DOWN:\r
-                map_x.at<float>(j,i) = i ;\r
-                map_y.at<float>(j,i) = src.rows - j ;\r
-                break;\r
-            case REFLECTION_X:\r
-                map_x.at<float>(j,i) = src.cols - i ;\r
-                map_y.at<float>(j,i) = j ;\r
-                break;\r
-            case REFLECTION_BOTH:\r
-                map_x.at<float>(j,i) = src.cols - i ;\r
-                map_y.at<float>(j,i) = src.rows - j ;\r
-                break;\r
-            } // end of switch\r
-        }\r
-    }\r
-}\r
-\r
-PERF_TEST(Transform, getPerspectiveTransform)\r
-{\r
-    unsigned int size = 8;\r
-    Mat source(1, size/2, CV_32FC2);\r
-    Mat destination(1, size/2, CV_32FC2);\r
-    Mat transformCoefficient;\r
-\r
-    declare.in(source, destination, WARMUP_RNG);\r
-\r
-    TEST_CYCLE()\r
-    {\r
-        transformCoefficient = getPerspectiveTransform(source, destination);\r
-    }\r
-}\r
-\r
+#include "perf_precomp.hpp"
+
+using namespace std;
+using namespace cv;
+using namespace perf;
+using namespace testing;
+using std::tr1::make_tuple;
+using std::tr1::get;
+
+enum{HALF_SIZE=0, UPSIDE_DOWN, REFLECTION_X, REFLECTION_BOTH};
+
+CV_ENUM(BorderMode, BORDER_CONSTANT, BORDER_REPLICATE);
+CV_ENUM(InterType, INTER_NEAREST, INTER_LINEAR);
+CV_ENUM(RemapMode, HALF_SIZE, UPSIDE_DOWN, REFLECTION_X, REFLECTION_BOTH);
+
+typedef TestBaseWithParam< tr1::tuple<Size, InterType, BorderMode> > TestWarpAffine;
+typedef TestBaseWithParam< tr1::tuple<Size, InterType, BorderMode> > TestWarpPerspective;
+typedef TestBaseWithParam< tr1::tuple<MatType, Size, InterType, BorderMode, RemapMode> > TestRemap;
+
+void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode );
+
+PERF_TEST_P( TestWarpAffine, WarpAffine,
+             Combine(
+                Values( szVGA, sz720p, sz1080p ),
+                ValuesIn( InterType::all() ),
+                ValuesIn( BorderMode::all() )
+             )
+)
+{
+    Size sz;
+    int borderMode, interType;
+    sz         = get<0>(GetParam());
+    borderMode = get<1>(GetParam());
+    interType  = get<2>(GetParam());
+
+    Mat src, img = imread(getDataPath("cv/shared/fruits.jpg"));
+    cvtColor(img, src, COLOR_BGR2RGBA, 4);
+    Mat warpMat = getRotationMatrix2D(Point2f(src.cols/2.f, src.rows/2.f), 30., 2.2);
+    Mat dst(sz, CV_8UC4);
+
+    declare.in(src).out(dst);
+
+    TEST_CYCLE() warpAffine( src, dst, warpMat, sz, interType, borderMode, Scalar::all(150) );
+
+    SANITY_CHECK(dst);
+
+}
+
+PERF_TEST_P( TestWarpPerspective, WarpPerspective,
+             Combine(
+                Values( szVGA, sz720p, sz1080p ),
+                ValuesIn( InterType::all() ),
+                ValuesIn( BorderMode::all() )
+             )
+)
+{
+    Size sz;
+    int borderMode, interType;
+    sz         = get<0>(GetParam());
+    borderMode = get<1>(GetParam());
+    interType  = get<2>(GetParam());
+
+
+    Mat src, img = imread(getDataPath("cv/shared/fruits.jpg"));
+    cvtColor(img, src, COLOR_BGR2RGBA, 4);
+    Mat rotMat = getRotationMatrix2D(Point2f(src.cols/2.f, src.rows/2.f), 30., 2.2);
+    Mat warpMat(3, 3, CV_64FC1);
+    for(int r=0; r<2; r++)
+        for(int c=0; c<3; c++)
+            warpMat.at<double>(r, c) = rotMat.at<double>(r, c);
+    warpMat.at<double>(2, 0) = .3/sz.width;
+    warpMat.at<double>(2, 1) = .3/sz.height;
+    warpMat.at<double>(2, 2) = 1;
+    Mat dst(sz, CV_8UC4);
+
+    declare.in(src).out(dst);
+
+    TEST_CYCLE() warpPerspective( src, dst, warpMat, sz, interType, borderMode, Scalar::all(150) );
+
+    SANITY_CHECK(dst);
+}
+
+PERF_TEST_P( TestRemap, remap,
+             Combine(
+                 Values( TYPICAL_MAT_TYPES ),
+                 Values( szVGA, sz720p, sz1080p ),
+                 ValuesIn( InterType::all() ),
+                 ValuesIn( BorderMode::all() ),
+                 ValuesIn( RemapMode::all() )
+                 )
+             )
+{
+    int type = get<0>(GetParam());
+    Size size = get<1>(GetParam());
+    int interpolationType = get<2>(GetParam());
+    int borderMode = get<3>(GetParam());
+    int remapMode = get<4>(GetParam());
+    unsigned int height = size.height;
+    unsigned int width = size.width;
+    Mat source(height, width, type);
+    Mat destination;
+    Mat map_x(height, width, CV_32F);
+    Mat map_y(height, width, CV_32F);
+
+    declare.in(source, WARMUP_RNG);
+
+    update_map(source, map_x, map_y, remapMode);
+
+    TEST_CYCLE()
+    {
+        remap(source, destination, map_x, map_y, interpolationType, borderMode);
+    }
+
+    SANITY_CHECK(destination, 1);
+}
+
+void update_map(const Mat& src, Mat& map_x, Mat& map_y, const int remapMode )
+{
+    for( int j = 0; j < src.rows; j++ )
+    {
+        for( int i = 0; i < src.cols; i++ )
+        {
+            switch( remapMode )
+            {
+            case HALF_SIZE:
+                if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
+                {
+                    map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;
+                    map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;
+                }
+                else
+                {
+                    map_x.at<float>(j,i) = 0 ;
+                    map_y.at<float>(j,i) = 0 ;
+                }
+                break;
+            case UPSIDE_DOWN:
+                map_x.at<float>(j,i) = i ;
+                map_y.at<float>(j,i) = src.rows - j ;
+                break;
+            case REFLECTION_X:
+                map_x.at<float>(j,i) = src.cols - i ;
+                map_y.at<float>(j,i) = j ;
+                break;
+            case REFLECTION_BOTH:
+                map_x.at<float>(j,i) = src.cols - i ;
+                map_y.at<float>(j,i) = src.rows - j ;
+                break;
+            } // end of switch
+        }
+    }
+}
+
+PERF_TEST(Transform, getPerspectiveTransform)
+{
+    unsigned int size = 8;
+    Mat source(1, size/2, CV_32FC2);
+    Mat destination(1, size/2, CV_32FC2);
+    Mat transformCoefficient;
+
+    declare.in(source, destination, WARMUP_RNG);
+
+    TEST_CYCLE()
+    {
+        transformCoefficient = getPerspectiveTransform(source, destination);
+    }
+}
+