C++实现NV12格式转BGR

NV12格式:

NV12 转 BGR 使用opencv接口函数:

cv::cvtColor(img_nv12, img_BGR, cv::COLOR_YUV2BGR_NV12);

如果不可调用opencv,使用以下自定义函数实现:

    static void NV12_T_BGR(unsigned int width, unsigned int height, unsigned char *yuyv,unsigned char *bgr) 
    {
        const int nv_start = width * height;
        int i, j, index = 0, rgb_index = 0;
        unsigned char y, u, v;
        int r, g, b, nv_index = 0;

        for (i = 0; i < height; i++) {
            for (j = 0; j < width; j++) {
                nv_index = i / 2 * width + j - j % 2;

                y = yuyv[rgb_index];
                u = yuyv[nv_start + nv_index ];
                v = yuyv[nv_start + nv_index + 1];
                r = y + ((360 * (v - 128) + 128) >> 8);
                g = y - (((88 * (u - 128) + 184 * (v - 128)) - 128) >> 8);
                b = y + ((455 * (u - 128) + 128) >> 8);
                
                if (r > 255)
                    r = 255;
                if (g > 255)
                    g = 255;
                if (b > 255)
                    b = 255;
                if (r < 0)
                    r = 0;
                if (g < 0)
                    g = 0;
                if (b < 0)
                    b = 0;

                index = rgb_index % width + i* width;
                bgr[index * 3 + 2] = r;
                bgr[index * 3 + 1] = g;
                bgr[index * 3 + 0] = b;
                rgb_index++;
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值