使用c语言实现将rgb数据转成yuv数据
时间: 2024-02-11 08:05:51 浏览: 25
可以使用以下代码实现将 RGB 数据转换为 YUV 数据:
```c
void rgb2yuv(unsigned char* rgb, unsigned char* yuv, int width, int height) {
int size = width * height;
int r, g, b, y, u, v;
for (int i = 0, j = 0; i < size; i += 2, j += 3) {
// 第一行像素
r = rgb[i * 3 + 0];
g = rgb[i * 3 + 1];
b = rgb[i * 3 + 2];
y = (int)(0.299 * r + 0.587 * g + 0.114 * b + 0.5);
u = (int)(-0.169 * r - 0.331 * g + 0.5 * b + 128 + 0.5);
v = (int)(0.5 * r - 0.419 * g - 0.081 * b + 128 + 0.5);
yuv[j + 0] = (unsigned char)y;
yuv[j + 1] = (unsigned char)u;
yuv[j + 2] = (unsigned char)v;
// 第二行像素
r = rgb[(i + width) * 3 + 0];
g = rgb[(i + width) * 3 + 1];
b = rgb[(i + width) * 3 + 2];
y = (int)(0.299 * r + 0.587 * g + 0.114 * b + 0.5);
yuv[j + 3] = (unsigned char)y;
}
}
```
其中,`rgb` 是 RGB 数据的指针,`yuv` 是 YUV 数据的指针,`width` 和 `height` 分别表示图像的宽度和高度。函数中使用了公式将 RGB 转换为 YUV,每两个像素处理一次。注意在计算 U 和 V 值时需要加上 128 并取整。