RGB2YUVとYUV2RGB間[-28]解決ダークネットソース画像フォーマット変換

この一連のダークネット解析ソースコードがRGB画像に関連し、YUV、HSVフォーマットimage.cは、我々は、本明細書()関数とyuv_to_rgb()機能に関与image.c rgb_to_yuvを解決します。

 

  • RGB形式がYUVフォーマットに変換しました

\ {bmatrix} Y \\ U \\ V \端{bmatrixを}開始= \ \\&-0.1678 -0.3313&0.5 \\ 0.5&-0.4187および-0.0813 {bmatrix} 0.299と0.587と0.114を開始\端{bmatrix } \開始{bmatrix} R \\ G \\ B \端{bmatrix}

 次のように対応する機能は以下のとおりです。

void rgb_to_yuv(image im)
{
    assert(im.c == 3);
    int i, j;
    float r, g, b;
    float y, u, v;
    for(j = 0; j < im.h; ++j){
        for(i = 0; i < im.w; ++i){
            r = get_pixel(im, i , j, 0);
            g = get_pixel(im, i , j, 1);
            b = get_pixel(im, i , j, 2);

            y = .299*r + .587*g + .114*b;
            u = -.14713*r + -.28886*g + .436*b;
            v = .615*r + -.51499*g + -.10001*b;

            set_pixel(im, i, j, 0, y);
            set_pixel(im, i, j, 1, u);
            set_pixel(im, i, j, 2, v);
        }
    }
}

 

  • 変換されたRGB形式のYUVフォーマット

\ {bmatrix} R \\ G \\ B \端{bmatrixを}開始= \ {bmatrix} 1&0&1.402 \\ 1&-0.34414 -0.71414&\\ 1&1.1772&0 \端{bmatrixを}開始\開始{bmatrix} Y \\ U \\ V \端{bmatrix}

void yuv_to_rgb(image im)
{
    assert(im.c == 3);
    int i, j;
    float r, g, b;
    float y, u, v;
    for(j = 0; j < im.h; ++j){
        for(i = 0; i < im.w; ++i){
            y = get_pixel(im, i , j, 0);
            u = get_pixel(im, i , j, 1);
            v = get_pixel(im, i , j, 2);

            r = y + 1.13983*v;
            g = y + -.39465*u + -.58060*v;
            b = y + 2.03211*u;

            set_pixel(im, i, j, 0, r);
            set_pixel(im, i, j, 1, g);
            set_pixel(im, i, j, 2, b);
        }
    }
}

[参考文献]

1. https://zhuanlan.zhihu.com/p/75735751

公開された401元の記事 ウォン称賛39 ビュー45万+

おすすめ

転載: blog.csdn.net/caicaiatnbu/article/details/104065571