你的实现仍然是YUYV,而不是UYVY
时间: 2024-03-20 11:43:57 浏览: 12
非常抱歉,我的回答中仍然是针对YUYV格式的转换,而不是UYVY格式的转换。下面是关于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] + 1.402 * v_val;
g = y[i+1] - 0.34414 * u_val - 0.71414 * v_val;
b = y[i+1] + 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+3] + 1.402 * v_val;
g = y[i+3] - 0.34414 * u_val - 0.71414 * v_val;
b = y[i+3] + 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);
}
}
```
在UYVY格式中,第一个像素的Y值和第二个像素的Y值是相邻的,而第一个像素的U值和第二个像素的V值是相邻的。因此,在处理时需要注意这种交替出现的规律。