0

RGB 値を YCbCr カラー形式に変換しようとしています。Afroge ライブラリを使用します。しかし、Y : 0.611、Cb : 0.15、Cr : -0.18 の場合、次のような結果が得られます。つまり、すべての値が 1 未満です。ただし、0 ~ 255 の値が必要です。これが私のコードです。

        Bitmap bitmap = (Bitmap)pictureBox1.Image;

        double xRatio = (double)bitmap.Width / (double)pictureBox1.Width;
        double yRatio = (double)bitmap.Height / (double)pictureBox1.Height;

        Color gotColor = bitmap.GetPixel((int)((double)mX * xRatio), (int)((double)mY * yRatio));
        label1.Text = (" R : " + gotColor.R);
        label2.Text = (" G : " + gotColor.G);
        label3.Text = (" B : " + gotColor.B);

        YCbCr ycrcb = new YCbCr();
        RGB rgbcolor = new RGB(gotColor);

        ycrcb.Y = YCbCr.FromRGB(rgbcolor).Y;
        ycrcb.Cr = YCbCr.FromRGB(rgbcolor).Cr;
        ycrcb.Cb = YCbCr.FromRGB(rgbcolor).Cb;

        label4.Text = ycrcb.Y.ToString();
        label5.Text = ycrcb.Cr.ToString();
        label6.Text = ycrcb.Cb.ToString();

私を助けてください。

4

2 に答える 2

1

これらはYCrCbの標準範囲です

ただし、結果を 0 ~ 255 の範囲に再スケーリングできます。

    label4.Text = (ycrcb.Y *255).ToString();
    label5.Text = ((ycrcb.Cr + 0.5)*255).ToString();
    label6.Text = ((ycrcb.Cb + 0.5)*255).ToString();
于 2012-08-16T15:33:28.523 に答える
0

式は次のとおりです。

Y = (byte)((0.299 * red) + (0.587 * green) + (0.114 * blue));
Cb = (byte)(128 - (0.168736 * red) + (0.331264 * green) + (0.5 * blue));
Cr = (byte)(128 + (0.5 * red) + (0.418688 * green) + (0.081312 * blue));

そしてjpg形式のYCbCrができます。結果の値は 0 から 255 の間です。

于 2015-11-21T13:56:31.483 に答える