RGB转YUV420代码示例

    xiaoxiao2021-12-14  40

    for(int i = 0; i < h; ++i) for (int j = 0; j < w; ++j) { Y = (unsigned char)((66 * (*r) + 129 * (*g) + 25 * (*b) + 128) >> 8) + 16; *(y_buffer + i * w + j) = Y; if ((i % 2 == 0) && (j % 2 == 0)) { U = (unsigned char)((-38 * (*r) - 74 * (*g) + 112 * (*b) + 128) >> 8) + 128; *(u_buffer + (i/2) * uv_w + j/2) = U; V = (unsigned char)((112 * (*r) - 94 * (*g) - 18 * (*b) + 128) >> 8) + 128; *(v_buffer + (i/2) * uv_w + j/2) = V; } }

    #define RGB2YUV_SHIFT 15 //ffmpeg rgb2yuv #define BY ( (int) (0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define BV (-(int) (0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define BU ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define GY ( (int) (0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define GV (-(int) (0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define GU (-(int) (0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define RY ( (int) (0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define RV ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) #define RU (-(int) (0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) y = (int)((RY * r + GY * g + BY * b + ( 33 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); u = (int)((RU * r + GU * g + BU * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); v = (int)((RV * r + GV * g + BV * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);

    转载请注明原文地址: https://ju.6miu.com/read-969590.html

    最新回复(0)