最近在做图像处理时,遇到一个图像转化的问题,是关于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++;
}
}
}