Rgb to Yuv,Tuv to Rgb转换(C# emgucv)

private void Rgb2Yuv(Image<Bgr, Byte> img, Image<Gray, double> yImg, Image<Gray, double> uImg, Image<Gray, double> vImg)
        {
            //  Y= 0.3*R + 0.59*G + 0.11*B
            //  U= (B-Y) * 0.493
            //  V= (R-Y) * 0.877
            double Y = 0.0, U = 0.0, V = 0.0;
            for (int h = 0; h < img.Height; ++h)
            {
                for (int w = 0; w < img.Width; ++w)
                {
                    //Y = 0.11 * img.Data[h, w, 0] + 0.59 * img.Data[h, w, 1] + 0.3 * img.Data[h, w, 2];
                    //U = (img.Data[h, w, 0] - Y) * 0.493;
                    //V = (img.Data[h, w, 2] - Y) * 0.877;
                    Y = 0.257 * img.Data[h, w, 0] + 0.504 * img.Data[h, w, 1] + 0.098 * img.Data[h, w, 2] + 16;
                    U = 0.148 * img.Data[h, w, 0] - 0.291 * img.Data[h, w, 1] + 0.439 * img.Data[h, w, 2] + 128;
                    V = 0.439 * img.Data[h, w, 0] - 0.368 * img.Data[h, w, 1] - 0.071 * img.Data[h, w, 2] + 128;
                    yImg.Data[h, w, 0] = Y;
                    uImg.Data[h, w, 0] = U;
                    vImg.Data[h, w, 0] = V;
                }
            }
        }
        //Y = 0.257R + 0.504G + 0.098B + 16
        //U = 0.148R - 0.291G + 0.439B + 128
        //V = 0.439R - 0.368G - 0.071B + 128

        //B = 1.164(Y - 16) + 2.018(U - 128)
        //G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
        //R = 1.164(Y - 16) + 1.596(V - 128)

        private void Yuv2Rgb(Image<Gray, double> yImg, Image<Gray, double> uImg, Image<Gray, double> vImg, Image<Bgr, Byte> img)
        {
            //R = Y + 1.4075 *(V-128)
            // G = Y – 0.3455 *(U –128) – 0.7169 *(V –128)
            // B = Y + 1.779 *(U – 128)


            double Y = 0.0, U = 0.0, V = 0.0;
            for (int h = 0; h < img.Height; ++h)
            {
                for (int w = 0; w < img.Width; ++w)
                {
                    Y = yImg.Data[h, w, 0];
                    U = uImg.Data[h, w, 0];
                    V = vImg.Data[h, w, 0];
                    //byte R = (byte)(Y + 1.4075 *(V-mid));
                    //byte G = (byte)(Y-0.3455 *(U-mid)-0.7169*(V-mid));
                    //byte B = (byte)(Y + 1.779 *(U-mid));

                    byte B = (byte)(1.164 * (Y - 16) + 2.018 * (U - 128));
                    byte G = (byte)(1.164 * (Y - 16) - 0.813 * (V - 128) - 0.391 * (U - 128));
                    byte R = (byte)(1.164 * (Y - 16) + 1.596 * (V - 128));

                    if (B > 255) B = 255;
                    if (B < 0) B = 0;
                    if (G > 255) G = 255;
                    if (G < 0) G = 0;
                    if (R > 255) R = 255;
                    if (R < 0) R = 0;
                    img.Data[h, w, 0] = B;
                    img.Data[h, w, 1] = G;
                    img.Data[h, w, 2] = R; ;
                }
            }
        }