Merge branch '2.4'
authorAndrey Kamaev <andrey.kamaev@itseez.com>
Mon, 11 Mar 2013 14:50:19 +0000 (18:50 +0400)
committerAndrey Kamaev <andrey.kamaev@itseez.com>
Mon, 11 Mar 2013 14:50:19 +0000 (18:50 +0400)
1  2 
modules/imgproc/include/opencv2/imgproc/imgproc.hpp
modules/imgproc/include/opencv2/imgproc/types_c.h
modules/imgproc/perf/perf_cvt_color.cpp
modules/imgproc/src/color.cpp
modules/imgproc/test/test_cvtyuv.cpp
modules/python/src2/cv2.cpp

      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
  };
  
  
@@@ -309,19 -309,22 +309,33 @@@ enu
      // 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
  };
  
  
@@@ -307,27 -314,27 +314,52 @@@ PERF_TEST_P(Size_CvtMode2, cvtColorYUV4
      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);
 +}
Simple merge
@@@ -237,6 -341,23 +341,23 @@@ public
      }
  };
  
 -        
+ 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)
Simple merge