当前位置:首页 > 行业动态 > 正文

YUV源码,探索数字视频的色彩编码基础

YUV是一种颜色编码方法,常用于视频压缩和数字图像处理。

YUV是一种颜色空间,用于表示视频图像,它由亮度分量(Y)和色度分量(U和V)组成,以下是一个简单的C++代码示例,用于将RGB图像转换为YUV格式:

YUV源码,探索数字视频的色彩编码基础  第1张

#include <iostream>
#include <vector>
// 定义一个结构体来存储RGB颜色
struct RGB {
    unsigned char r;
    unsigned char g;
    unsigned char b;
};
// 定义一个结构体来存储YUV颜色
struct YUV {
    unsigned char y;
    unsigned char u;
    unsigned char v;
};
// 函数:将RGB颜色转换为YUV颜色
YUV rgb_to_yuv(const RGB& rgb) {
    YUV yuv;
    int y = (66 * rgb.r + 129 * rgb.g + 25 * rgb.b + 128) >> 8;
    int u = (38 * rgb.r  74 * rgb.g + 112 * rgb.b + 128) >> 8;
    int v = (112 * rgb.r  94 * rgb.g  18 * rgb.b + 128) >> 8;
    yuv.y = static_cast<unsigned char>(std::max(0, std::min(255, y)));
    yuv.u = static_cast<unsigned char>(std::max(0, std::min(255, u + 128)));
    yuv.v = static_cast<unsigned char>(std::max(0, std::min(255, v + 128)));
    return yuv;
}
int main() {
    // 创建一个RGB颜色数组
    std::vector<RGB> rgb_image = {
        {255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {0, 255, 255}, {255, 0, 255}
    };
    // 创建一个YUV颜色数组
    std::vector<YUV> yuv_image;
    // 转换RGB图像到YUV格式
    for (const auto& rgb : rgb_image) {
        yuv_image.push_back(rgb_to_yuv(rgb));
    }
    // 输出YUV图像
    for (const auto& yuv : yuv_image) {
        std::cout << "Y: " << static_cast<int>(yuv.y) << " U: " << static_cast<int>(yuv.u) << " V: " << static_cast<int>(yuv.v) << std::endl;
    }
    return 0;
}

这个代码示例首先定义了两个结构体,分别用于存储RGB和YUV颜色,定义了一个名为rgb_to_yuv的函数,该函数接受一个RGB颜色作为输入,并返回相应的YUV颜色,在main函数中,我们创建了一个RGB颜色数组,将其转换为YUV格式,并输出结果。

到此,以上就是小编对于“yuv 源码”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

0