c++ YUV422怎么转化为RGB,然后RGB转化为RAW8_mono
时间: 2024-01-21 18:18:10 浏览: 29
将 YUV422 转化为 RGB 可以使用以下公式:
R = Y + 1.402 * (V - 128)
G = Y - 0.344136 * (U - 128) - 0.714136 * (V - 128)
B = Y + 1.772 * (U - 128)
其中,Y、U、V 分别表示 YUV422 中的亮度、色度蓝、色度红,R、G、B 分别表示 RGB 中的红、绿、蓝。
将 RGB 转化为 RAW8_mono 可以使用以下公式:
RAW8_mono = 0.299 * R + 0.587 * G + 0.114 * B
公式中的系数是根据人眼对 RGB 颜色的敏感程度而确定的。
你可以使用以下 c++ 代码实现 YUV422 转化为 RGB,然后 RGB 转化为 RAW8_mono:
```c++
void YUV422_to_RGB(unsigned char* yuv422, unsigned char* rgb, int width, int height) {
for (int i = 0; i < width * height; i++) {
int y = yuv422[2 * i];
int u = yuv422[2 * i + 1] - 128;
int v = yuv422[2 * i + 3] - 128;
int r = y + 1.402 * v;
int g = y - 0.344136 * u - 0.714136 * v;
int b = y + 1.772 * u;
rgb[3 * i] = (r < 0) ? 0 : ((r > 255) ? 255 : r);
rgb[3 * i + 1] = (g < 0) ? 0 : ((g > 255) ? 255 : g);
rgb[3 * i + 2] = (b < 0) ? 0 : ((b > 255) ? 255 : b);
}
}
void RGB_to_RAW8_mono(unsigned char* rgb, unsigned char* raw8_mono, int width, int height) {
for (int i = 0; i < width * height; i++) {
int r = rgb[3 * i];
int g = rgb[3 * i + 1];
int b = rgb[3 * i + 2];
raw8_mono[i] = 0.299 * r + 0.587 * g + 0.114 * b;
}
}
```