Performance testing branch is merged back into trunk
[profile/ivi/opencv.git] / modules / imgproc / perf / perf_cvt_color.cpp
1 #include "perf_precomp.hpp"
2
3 using namespace std;
4 using namespace cv;
5 using namespace perf;
6
7 CV_ENUM(CvtMode, CV_YUV2BGR, CV_YUV2RGB, //YUV
8                  CV_YUV420i2BGR, CV_YUV420i2RGB, CV_YUV420sp2BGR, CV_YUV420sp2RGB, //YUV420
9                  CV_RGB2GRAY, CV_RGBA2GRAY, CV_BGR2GRAY, CV_BGRA2GRAY, //Gray
10                  CV_GRAY2RGB, CV_GRAY2RGBA/*, CV_GRAY2BGR, CV_GRAY2BGRA*/ //Gray2
11                  )
12
13 typedef std::tr1::tuple<Size, CvtMode> Size_CvtMode_t;
14 typedef perf::TestBaseWithParam<Size_CvtMode_t> Size_CvtMode;
15
16 typedef std::tr1::tuple<Size, CvtMode, int> Size_CvtMode_OutChNum_t;
17 typedef perf::TestBaseWithParam<Size_CvtMode_OutChNum_t> Size_CvtMode_OutChNum;
18
19
20 /*
21 // void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
22 */
23
24
25 PERF_TEST_P( Size_CvtMode_OutChNum, cvtColorYUV,
26     testing::Combine( 
27     testing::Values( TYPICAL_MAT_SIZES ), 
28         testing::Values( (int)CV_YUV2BGR, (int)CV_YUV2RGB ),
29         testing::Values( 3, 4 )
30     )
31 )
32 {
33     Size sz = std::tr1::get<0>(GetParam());
34     int mode = std::tr1::get<1>(GetParam());
35     int ch = std::tr1::get<2>(GetParam());
36
37     Mat src(sz, CV_8UC3);
38     Mat dst(sz, CV_8UC(ch));
39
40     declare.in(src, WARMUP_RNG).out(dst);
41     
42     TEST_CYCLE(100) { cvtColor(src, dst, mode, ch);  }
43     
44     SANITY_CHECK(dst);
45 }
46
47
48 PERF_TEST_P( Size_CvtMode_OutChNum, cvtColorYUV420,
49     testing::Combine( 
50         testing::Values( szVGA, sz720p, sz1080p, Size(130, 60) ), 
51         testing::Values( (int)CV_YUV420i2BGR, (int)CV_YUV420i2RGB, (int)CV_YUV420sp2BGR, (int)CV_YUV420sp2RGB ),
52         testing::Values( 3, 4 )
53     )
54 )
55 {
56     Size sz = std::tr1::get<0>(GetParam());
57     int mode = std::tr1::get<1>(GetParam());
58     int ch = std::tr1::get<2>(GetParam());
59
60     Mat src(sz.height+sz.height/2, sz.width, CV_8UC1);
61     Mat dst(sz, CV_8UC(ch));
62
63     declare.in(src, WARMUP_RNG).out(dst);
64     
65     TEST_CYCLE(100) { cvtColor(src, dst, mode, ch);  }
66     
67     SANITY_CHECK(dst);
68 }
69
70
71 PERF_TEST_P( Size_CvtMode, cvtColorGray,
72     testing::Combine( 
73         testing::Values( TYPICAL_MAT_SIZES ), 
74         testing::Values( (int)CV_RGB2GRAY, (int)CV_RGBA2GRAY, (int)CV_BGR2GRAY, (int)CV_BGRA2GRAY )
75     )
76 )
77 {
78     Size sz = std::tr1::get<0>(GetParam());
79     int mode = std::tr1::get<1>(GetParam());
80
81     Mat src(sz, CV_8UC((mode==CV_RGBA2GRAY || mode==CV_BGRA2GRAY)?4:3));
82     Mat dst(sz, CV_8UC1);
83
84     declare.in(src, WARMUP_RNG).out(dst);
85     
86     TEST_CYCLE(100) { cvtColor(src, dst, mode);  }
87     
88     SANITY_CHECK(dst);
89 }
90
91
92 PERF_TEST_P( Size_CvtMode, cvtColorGray2,
93     testing::Combine( 
94         testing::Values( TYPICAL_MAT_SIZES ), 
95         testing::Values( (int)CV_GRAY2RGB, (int)CV_GRAY2RGBA/*, CV_GRAY2BGR, CV_GRAY2BGRA*/ )
96     )
97 )
98 {
99     Size sz = std::tr1::get<0>(GetParam());
100     int mode = std::tr1::get<1>(GetParam());
101
102     Mat src(sz, CV_8UC1);
103     Mat dst(sz, CV_8UC((mode==CV_GRAY2RGBA || mode==CV_GRAY2BGRA)?4:3));
104
105     declare.in(src, WARMUP_RNG).out(dst);
106     
107     TEST_CYCLE(100) { cvtColor(src, dst, mode);  }
108     
109     SANITY_CHECK(dst);
110 }
111