c rgb转yuv
时间: 2023-07-28 09:06:28 浏览: 105
RGB和YUV是两种不同的颜色表示方式。RGB是通过红、绿、蓝三个颜色通道来表示颜色的,而YUV则是通过亮度(Y)和色度(U、V)两个通道来表示颜色的。
将RGB转换为YUV的公式如下:
Y = 0.299R + 0.587G + 0.114B
U = -0.14713R - 0.28886G + 0.436B
V = 0.615R - 0.51498G - 0.10001B
其中,R、G、B的取值范围为0~255,Y、U、V的取值范围也是0~255。
下面是一个C语言实现RGB转YUV的代码示例:
```
void rgb2yuv(unsigned char* rgb, unsigned char* yuv, int width, int height) {
int i, j;
unsigned char r, g, b;
unsigned char* y = yuv;
unsigned char* u = yuv + width * height;
unsigned char* v = yuv + width * height + width * height / 4;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
r = *(rgb + i * width * 3 + j * 3);
g = *(rgb + i * width * 3 + j * 3 + 1);
b = *(rgb + i * width * 3 + j * 3 + 2);
*y++ = (unsigned char)(0.299 * r + 0.587 * g + 0.114 * b);
*u++ = (unsigned char)(-0.14713 * r - 0.28886 * g + 0.436 * b + 128);
*v++ = (unsigned char)(0.615 * r - 0.51498 * g - 0.10001 * b + 128);
}
}
}
```
在这个示例中,输入的RGB图像数据存储在一个指向unsigned char类型的指针rgb中,输出的YUV图像数据存储在一个指向unsigned char类型的指针yuv中。width和height分别表示图像的宽和高。函数中的for循环遍历了整个图像,将每个像素的RGB值转换为对应的YUV值,并将它们存储在yuv数组中。