你这个好像不是UYVU的格式
时间: 2024-03-20 08:43:47 浏览: 21
非常抱歉,我看错了你的问题,你是问关于YUV422的UYVY格式的转换,而不是YUV422的YUVU格式。下面是对于UYVY格式的转换代码示例:
```c++
void YUV422_UYVY_to_RGB(unsigned char* yuv, unsigned char* rgb, int width, int height) {
int size = width * height;
unsigned char* y = yuv;
unsigned char* u = yuv + 1;
unsigned char* v = yuv + 3;
int r, g, b;
for(int i = 0, j = 0; i < size * 2; i+=4, j+=6) {
int u_val = u[i/2] - 128;
int v_val = v[i/2] - 128;
r = y[i] + 1.402 * v_val;
g = y[i] - 0.34414 * u_val - 0.71414 * v_val;
b = y[i] + 1.772 * u_val;
rgb[j] = r > 255 ? 255 : (r < 0 ? 0 : r);
rgb[j+1] = g > 255 ? 255 : (g < 0 ? 0 : g);
rgb[j+2] = b > 255 ? 255 : (b < 0 ? 0 : b);
r = y[i+2] + 1.402 * v_val;
g = y[i+2] - 0.34414 * u_val - 0.71414 * v_val;
b = y[i+2] + 1.772 * u_val;
rgb[j+3] = r > 255 ? 255 : (r < 0 ? 0 : r);
rgb[j+4] = g > 255 ? 255 : (g < 0 ? 0 : g);
rgb[j+5] = b > 255 ? 255 : (b < 0 ? 0 : b);
}
}
```
同样是使用的RGB公式为:
R = Y + 1.402 * (V - 128)
G = Y - 0.34414 * (U - 128) - 0.71414 * (V - 128)
B = Y + 1.772 * (U - 128)
不同的是,在UYVY格式中,U和V交替出现,即第一个像素的U值和第二个像素的V值是相邻的,需要在处理时注意。