10bit的YUV400图像转RGB图像算法

最近在做图像处理时,遇到一个图像转化的问题,是关于YUV400转为RGB图像,我也在网上找了一下YUV400图像的资料,网上关于这部分的资料少得可怜,在找转换算法时大部分都是YUV420图像转RGB这种,于是打算自己手写一个转换算法,我先来介绍一下YUV400这种图像,方便大家理解:

YUV400是一种颜色编码方案,它表示图像的亮度信息,而忽略了色度信息,是一种灰度图。在YUV400中,每个像素仅包含一个亮度值(Y),而没有色度值(U和V)。这种格式通常用于一些特定的应用,如黑白摄像头或需要单色图像处理的场景。相比于其他彩色编码方案,YUV400可以节省存储空间和带宽,但无法呈现出彩色图像。

下面粘贴上我的代码,我的思路是提取Y分量然后赋值给RGB的每个通道,这得到的RGB虽然是三通道的,但是也是黑白的,不是彩色的:

#define BYTE unsigned char;

typedef struct {
    BYTE byB;
    BYTE byG;
    BYTE byR;
} RGBPixel;


void yuv2rgb(BYTE *src,int W, int H, BYTE *rgb, int bit_depth){
    char image1 ;
    unsigned short *SrcImage = (unsigned short *)src;
    RGBPixel *image2 = (RGBPixel *)rgb;
    unsigned char shift_bits = (bit_depth - 8);//移位操作,10位转8位

    unsigned int lIdx = 0;
    //提取分量 然后赋值
    for(int i = 0;i < H; i++){
        for(int j = 0; j < W; j++){
            short int CurrentPixel = SrcImage[lIdx];
            image1 = (BYTE)(CurrentPixel >> shift_bits);

            image2[lIdx].byG = (BYTE)image1;
            image2[lIdx].byR = (BYTE)image1;
            image2[lIdx].byB = (BYTE)image1;
            lIdx++;

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值