C++ RGB转YUV420SP
时间: 2023-09-13 11:07:01 浏览: 237
你可以使用以下代码将RGB图像转换为YUV420SP格式:
```cpp
void RGBtoYUV420SP(unsigned char* rgb, unsigned char* yuv, int width, int height) {
int frameSize = width * height;
int chromaSize = frameSize / 4;
unsigned char* rgbptr = rgb;
unsigned char* yptr = yuv;
unsigned char* vuvptr = yuv + frameSize;
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
int r = *rgbptr++;
int g = *rgbptr++;
int b = *rgbptr++;
int y = ((66 * r + 129 * g + 25 * b + 128) >> 8) + 16;
int u = ((-38 * r - 74 * g + 112 * b + 128) >> 8) + 128;
int v = ((112 * r - 94 * g - 18 * b + 128) >> 8) + 128;
*yptr++ = (unsigned char)(y < 0 ? 0 : (y > 255 ? 255 : y));
if (j % 2 == 0 && i % 2 == 0) {
*vuvptr++ = (unsigned char)(v < 0 ? 0 : (v > 255 ? 255 : v));
*vuvptr++ = (unsigned char)(u < 0 ? 0 : (u > 255 ? 255 : u));
}
}
}
}
```
这个函数将RGB图像数据存储在 `rgb` 数组中,将转换后的YUV420SP数据存储在 `yuv` 数组中。传入的 `width` 和 `height` 参数是图像的宽度和高度。注意,输入的RGB图像数据应按照顺序存储,即每个像素的RGB分量依次排列。
请确保在使用这段代码时,已经为 `yuv` 数组分配了足够的内存空间,并且传入的RGB图像数据大小与图像宽度、高度相匹配。
阅读全文