C++ rgb转nv12
时间: 2023-07-11 21:26:33 浏览: 122
RGB 转 NV12 是将 RGB 格式的图像数据转换为 NV12 格式的图像数据。其中,NV12 是一种常见的 YUV 格式,常用于视频编码和视频传输。下面是一个简单的 C++ 代码实现 RGB 转 NV12 的过程:
```c++
#include <vector>
// 将 RGB 图像数据转换为 NV12 图像数据
void rgb2nv12(const unsigned char* rgb, int width, int height, std::vector<unsigned char>& nv12) {
// 计算 YUV 图像数据的大小
int y_size = width * height;
int uv_size = y_size / 2;
// 分配内存空间
nv12.resize(y_size + uv_size);
// RGB 转 YUV
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int r = rgb[(i * width + j) * 3];
int g = rgb[(i * width + j) * 3 + 1];
int b = rgb[(i * width + j) * 3 + 2];
// 计算 Y 值
nv12[i * width + j] = static_cast<unsigned char>(0.299 * r + 0.587 * g + 0.114 * b);
// 计算 U、V 值
if (i % 2 == 0 && j % 2 == 0) {
nv12[y_size + (i / 2) * width + j] = static_cast<unsigned char>(-0.169 * r - 0.331 * g + 0.5 * b + 128);
nv12[y_size + uv_size / 2 + (i / 2) * width + j] = static_cast<unsigned char>(0.5 * r - 0.419 * g - 0.081 * b + 128);
}
}
}
}
```
这段代码中,我们首先计算了 YUV 图像数据的大小,然后分配了内存空间,接着使用双重循环遍历 RGB 图像数据,将 RGB 值转换为 YUV 值,并存储到 NV12 图像数据中。注意,NV12 图像数据中,UV 值的分辨率是 Y 值的一半,因此我们需要按照一定的规则将 UV 值存储到 NV12 图像数据中。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)