C++ rgb转nv12
时间: 2023-07-11 13:26:54 浏览: 155
RGB转NV12的过程可以分为以下几步:
1. 将RGB图像转换为YUV格式;
2. 对YUV图像进行采样,得到YUV420格式;
3. 将YUV420格式转换为NV12格式。
以下是C++实现的代码示例:
```c++
void rgb2yuv(int r, int g, int b, int& y, int& u, int& v) {
y = (int)(0.299 * r + 0.587 * g + 0.114 * b);
u = (int)((b - y) * 0.493 + 128);
v = (int)((r - y) * 0.877 + 128);
}
void rgb2nv12(const unsigned char* rgb, unsigned char* nv12, int width, int height) {
int y_size = width * height;
int uv_size = y_size / 2;
int r, g, b, y, u, v;
// RGB to YUV
for (int i = 0; i < y_size; i++) {
r = rgb[i * 3];
g = rgb[i * 3 + 1];
b = rgb[i * 3 + 2];
rgb2yuv(r, g, b, y, u, v);
nv12[i] = y;
}
// YUV420
for (int i = 0; i < uv_size; i++) {
r = rgb[(i * 2 + y_size) * 3];
g = rgb[(i * 2 + y_size) * 3 + 1];
b = rgb[(i * 2 + y_size) * 3 + 2];
rgb2yuv(r, g, b, y, u, v);
nv12[y_size + i * 2] = u;
nv12[y_size + i * 2 + 1] = v;
}
}
```
其中,`rgb`为输入的RGB图像数据,`nv12`为输出的NV12图像数据,`width`和`height`分别为图像的宽度和高度。在转换过程中,先将RGB图像转换为YUV格式,然后对YUV图像进行采样,最后将YUV420格式转换为NV12格式。
阅读全文