COLOR_RGBA2mRGBA = 125,
COLOR_mRGBA2RGBA = 126,
- COLOR_COLORCVT_MAX = 127
++ COLOR_RGB2YUV_I420 = 127,
++ COLOR_BGR2YUV_I420 = 128,
++ COLOR_RGB2YUV_IYUV = COLOR_RGB2YUV_I420,
++ COLOR_BGR2YUV_IYUV = COLOR_BGR2YUV_I420,
++
++ COLOR_RGBA2YUV_I420 = 129,
++ COLOR_BGRA2YUV_I420 = 130,
++ COLOR_RGBA2YUV_IYUV = COLOR_RGBA2YUV_I420,
++ COLOR_BGRA2YUV_IYUV = COLOR_BGRA2YUV_I420,
++ COLOR_RGB2YUV_YV12 = 131,
++ COLOR_BGR2YUV_YV12 = 132,
++ COLOR_RGBA2YUV_YV12 = 133,
++ COLOR_BGRA2YUV_YV12 = 134,
++
+ // Edge-Aware Demosaicing
- COLOR_BayerBG2BGR_EA = 127,
- COLOR_BayerGB2BGR_EA = 128,
- COLOR_BayerRG2BGR_EA = 129,
- COLOR_BayerGR2BGR_EA = 130,
++ COLOR_BayerBG2BGR_EA = 135,
++ COLOR_BayerGB2BGR_EA = 136,
++ COLOR_BayerRG2BGR_EA = 137,
++ COLOR_BayerGR2BGR_EA = 138,
+
+ COLOR_BayerBG2RGB_EA = COLOR_BayerRG2BGR_EA,
+ COLOR_BayerGB2RGB_EA = COLOR_BayerGR2BGR_EA,
+ COLOR_BayerRG2RGB_EA = COLOR_BayerBG2BGR_EA,
+ COLOR_BayerGR2RGB_EA = COLOR_BayerGB2BGR_EA,
+
- COLOR_COLORCVT_MAX = 131
++ COLOR_COLORCVT_MAX = 139
};
// alpha premultiplication
CV_RGBA2mRGBA = 125,
CV_mRGBA2RGBA = 126,
-
+
+ CV_RGB2YUV_I420 = 127,
+ CV_BGR2YUV_I420 = 128,
+ CV_RGB2YUV_IYUV = CV_RGB2YUV_I420,
+ CV_BGR2YUV_IYUV = CV_BGR2YUV_I420,
+
+ CV_RGBA2YUV_I420 = 129,
+ CV_BGRA2YUV_I420 = 130,
+ CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420,
+ CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420,
+ CV_RGB2YUV_YV12 = 131,
+ CV_BGR2YUV_YV12 = 132,
+ CV_RGBA2YUV_YV12 = 133,
+ CV_BGRA2YUV_YV12 = 134,
+
- CV_COLORCVT_MAX = 135
+ // Edge-Aware Demosaicing
- CV_BayerBG2BGR_EA = 127,
- CV_BayerGB2BGR_EA = 128,
- CV_BayerRG2BGR_EA = 129,
- CV_BayerGR2BGR_EA = 130,
++ CV_BayerBG2BGR_EA = 135,
++ CV_BayerGB2BGR_EA = 136,
++ CV_BayerRG2BGR_EA = 137,
++ CV_BayerGR2BGR_EA = 138,
+
+ CV_BayerBG2RGB_EA = CV_BayerRG2BGR_EA,
+ CV_BayerGB2RGB_EA = CV_BayerGR2BGR_EA,
+ CV_BayerRG2RGB_EA = CV_BayerBG2BGR_EA,
+ CV_BayerGR2RGB_EA = CV_BayerGB2BGR_EA,
+
- CV_COLORCVT_MAX = 131
++ CV_COLORCVT_MAX = 139
};
SANITY_CHECK(dst, 1);
}
+ typedef std::tr1::tuple<Size, CvtMode3> Size_CvtMode3_t;
+ typedef perf::TestBaseWithParam<Size_CvtMode3_t> Size_CvtMode3;
+
+ PERF_TEST_P(Size_CvtMode3, cvtColorRGB2YUV420p,
+ testing::Combine(
+ testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
+ testing::ValuesIn(CvtMode3::all())
+ )
+ )
+ {
+ Size sz = get<0>(GetParam());
+ int mode = get<1>(GetParam());
+ ChPair ch = getConversionInfo(mode);
+
+ Mat src(sz, CV_8UC(ch.scn));
+ Mat dst(sz.height + sz.height / 2, sz.width, CV_8UC(ch.dcn));
+
+ declare.time(100);
+ declare.in(src, WARMUP_RNG).out(dst);
+
+ TEST_CYCLE() cvtColor(src, dst, mode, ch.dcn);
+
+ SANITY_CHECK(dst, 1);
+ }
++
+CV_ENUM(EdgeAwareBayerMode, COLOR_BayerBG2BGR_EA, COLOR_BayerGB2BGR_EA, COLOR_BayerRG2BGR_EA, COLOR_BayerGR2BGR_EA)
+
+typedef std::tr1::tuple<Size, EdgeAwareBayerMode> EdgeAwareParams;
+typedef perf::TestBaseWithParam<EdgeAwareParams> EdgeAwareDemosaicingTest;
+
+PERF_TEST_P(EdgeAwareDemosaicingTest, demosaicingEA,
+ testing::Combine(
+ testing::Values(szVGA, sz720p, sz1080p, Size(130, 60)),
+ testing::ValuesIn(EdgeAwareBayerMode::all())
+ )
+ )
+{
+ Size sz = get<0>(GetParam());
+ int mode = get<1>(GetParam());
+
+ Mat src(sz, CV_8UC1);
+ Mat dst(sz, CV_8UC3);
+
+ declare.in(src, WARMUP_RNG).out(dst);
+
+ TEST_CYCLE() cvtColor(src, dst, mode, 3);
+
+ SANITY_CHECK(dst, 1);
+}
}
};
-
+ class RGB2YUV_Converter
+ {
+ public:
+ YUV convert(RGB rgb)
+ {
+ int r = rgb[0];
+ int g = rgb[1];
+ int b = rgb[2];
++
+ uchar y = saturate_cast<uchar>((int)( 0.257f*r + 0.504f*g + 0.098f*b + 0.5f) + 16);
+ uchar u = saturate_cast<uchar>((int)(-0.148f*r - 0.291f*g + 0.439f*b + 0.5f) + 128);
+ uchar v = saturate_cast<uchar>((int)( 0.439f*r - 0.368f*g - 0.071f*b + 0.5f) + 128);
+
+ return YUV(y, u, v);
+ }
+ };
+
YUVreader* YUVreader::getReader(int code)
{
switch(code)