YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB

2023-11-14

YUYV、YVYU、UYVY、VYUY格式,它们都是YUV422的打包格式——即在内存中,Y、U、V都是挨着排序的。它们的名称就表示了Y、U、V的顺序。像YUYV,就是Y、U、Y、V、Y、U、Y、V。在做转换时,就显得很容易、简单了。

因为极其相近,故在将这几种格式全部封闭到一个函数里做。代码如下:

void yuv422packed_to_rgb24(YUV_TYPE type, unsigned char* yuv422p, unsigned char* rgb, int width, int height)
{
    int y, cb, cr;
    int r, g, b;
    int i = 0;
    unsigned char* p;
    unsigned char* p_rgb;
 
    p = yuv422p;
 
    p_rgb = rgb;
 
    init_yuv422p_table();
 
    for (i = 0; i < width * height / 2; i++)
    {
        switch(type)
        {
        case FMT_YUYV:
            y  = p[0];
            cb = p[1];
            cr = p[3];
            break;
        case FMT_YVYU:
            y  = p[0];
            cr = p[1];
            cb = p[3];
            break;
        case FMT_UYVY:
            cb = p[0];
            y  = p[1];
            cr = p[2];
            break;
        case FMT_VYUY:
            cr = p[0];
            y  = p[1];
            cb = p[2];
            break;
        default:
            break;
        }
 
        r = MAX (0, MIN (255, (V[cr] + Y1[y])/10000));   //R value
        b = MAX (0, MIN (255, (U[cb] + Y1[y])/10000));   //B value
        g = MAX (0, MIN (255, (Y2[y] - 5094*(r) - 1942*(b))/10000)); //G value
 
        // 此处可调整RGB排序,BMP图片排序为BGR
        // 默认排序为:RGB
        p_rgb[0] = r;
        p_rgb[1] = g;
        p_rgb[2] = b;
 
        switch(type)
        {
        case FMT_YUYV:
        case FMT_YVYU:
            y = p[2];
            break;
        case FMT_UYVY:
        case FMT_VYUY:
            y = p[3];
            break;
        default:
            break;
        }
 
        r = MAX (0, MIN (255, (V[cr] + Y1[y])/10000));   //R value
        b = MAX (0, MIN (255, (U[cb] + Y1[y])/10000));   //B value
        g = MAX (0, MIN (255, (Y2[y] - 5094*(r) - 1942*(b))/10000)); //G value
 
        p_rgb[3] = r;
        p_rgb[4] = g;
        p_rgb[5] = b;
 
        p += 4;
        p_rgb += 6;
    }
}

在做转换时,要注意YUV422采样格式,2个Y共用1个U和1个V,因此每一次循环就是读取1个Y、1个U和V转换成R、G、B,再读取下一个Y、U、V。由于UV共用,所以第2次转换时不用再给U、V赋值了。

#ifndef max
#define max(a, b) ((a) > (b) ? (a) : (b))
#endif
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif

static long U[256], V[256], Y1[256], Y2[256];

typedef enum
{
      FMT_YUYV=1, FMT_YVYU, FMT_UYVY, FMT_VYUY
}YUV_TYPE;

void init_yuv422p_table(void)
{
    int i;
    static int init = 0;
    if (init == 1) return;
    // Initialize table
    for (i = 0; i < 256; i++)
    {
        V[i]  = 15938 * i - 2221300;
        U[i]  = 20238 * i - 2771300;
        Y1[i] = 11644 * i;
        Y2[i] = 19837 * i - 311710;
    }

    init = 1;
}

原文链接:https://latelee.blog.csdn.net/article/details/47304581

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB 的相关文章

  • 如何在 C++ 中将 RGB 颜色值转换为十六进制值?

    在我的 C 应用程序中 我有一个 png 图像的颜色 以红色 绿色 蓝色值表示 我将这些值存储在三个整数中 如何将RGB值转换为等效的十六进制值 类似格式的示例 0x1906 编辑 我会将格式保存为 GLuint 将每种颜色的适当位存储到至
  • 为什么 RGB 使用 6 个十六进制数字?

    据我所知 RGB 用两个十六进制数字编码颜色 对应于红色 绿色和蓝色分量 例如 ff0000 是纯红色 据我了解 每个十六进制数字代表 0 15 之间的数字 或 4 位信息 但是如何用 32 位来表示每种颜色呢 为什么使用两位数字表示红色
  • RGB 到 HSL 转换

    我正在创建一个颜色选择器工具 对于 HSL 滑块 我需要能够将 RGB 转换为 HSL 当我搜索 SO 进行转换的方法时 我发现了这个问题HSL 到 RGB 颜色转换 https stackoverflow com questions 23
  • 获取 #000 格式的背景颜色而不是 RGB [重复]

    这个问题在这里已经有答案了 使用此代码 我可以获得表中任何 TD 的 RGB 颜色 alert this css background color 结果是 RGB 0 255 0 jquery 是否可以获取 000 格式 或者我可以使用函数
  • 如何在字符串中存储颜色?

    如果颜色是人类可读格式 我想将颜色存储在字符串中 如果不是 则将其存储在 ToArgb 中 颜色是红色 然后将其存储在 Red 字符串中 如果颜色是绿色的某种变体 则将其存储为 ff40ff80 在运行时我想将此字符串转换回 Color 类
  • 将真彩色 RGB 图像转换为索引颜色

    我想使用索引调色板将 24 位 RGB 图像 每个通道 8 位 转换为 8 位 我最初的想法是创建一个数组并简单地计算每种颜色在图像中出现的次数 但我认为如果有大面积的颜色略有变化而占用了所有调色板空间 那将是浪费较小但可能更重要的颜色组
  • 将 RGB 颜色存储在 MySQL 中。 char 还是 int 更好?

    我使用 PHP 从 MySQL 数据库查询 CSS 设置 然后将其回显到 CSS 样式表中 示例片段如下
  • 在 Python 中将图像中的颜色映射到颜色列表中最接近的成员

    我有一个 19 种颜色的列表 它是一个大小为 numpy 的数组 19 3 colors np array 0 0 0 0 0 255 255 0 0 150 30 150 255 65 255 150 80 0 170 120 65 12
  • 从 Exif 数据计算照度

    我如何通过iPhone相机计算勒克斯或照度 我已经计算了所有exif数据 如下所示 key FocalLength value 3 85 key MeteringMode value 5 key ShutterSpeedValue valu
  • jquery # 颜色转rgba?

    是否可以这样转换颜色 ff0000 to rgb 所以转换 ff0000 to rgb 255 0 0 我很确定这一定是可能的 我只是不知道如何实现 任何见解都会很棒 你可以使用 var s ff0000 var patt da fA F
  • Android:将 RGB888 转换为 Y800

    我正在从 vuforia 获取作为 RGB888 bytes 捕获的图像 我想将其传递给 zbar 它期望格式为 Y800 我怎样才能做到这一点 i tried Image barcode new Image width height RG
  • 为什么 AVFoundation 不接受 iOS 设备上的平面像素缓冲区?

    我一直在努力找出我的代码有什么问题 我正在创建一个平面CVPixelBufferRef写信给AVAssetWriter 该像素缓冲区是通过其他一些过程手动创建的 即 我没有从相机或类似的东西获取这些样本 在 iOS 模拟器上 附加示例并创建
  • YUY2 与 YUV 422

    我无法理解两者之间的确切区别 从研究来看 更多地讨论两者是不同的 但少数人似乎将它们分组在 4 2 2 抽样方案下 YUV 422 I 和 J 版本 有一个亮度平面 Y 和 2 个色度平面 U V 然而 在 I422 中 色度平面 蓝色和红
  • Unity 的 YUV 着色器?

    我在 Unity 中有一些 适当的 平面的 YUV 纹理 我只想看看它们供开发使用 Unity 他们的着色器语言变体 实际上有一个可用的 YUV 着色器吗 从概念上讲 从 YUV 转换为 RGB 很简单 但有点繁琐 YUV 到 RGB 转换
  • 有人知道 10 位原始 RGB 吗?关于全视

    我正在使用 Omnivision ov5620 http electronics123 net amazon datasheet OV5620 CLCC DS 20 1 3 pdf http electronics123 net amazo
  • RGB 值作为变量

    如何在 rgb 中存储变量值 我使用这个不起作用的代码 我希望它是这样的 但不知怎的 它没有正确存储 R 将引号放在 200 左右 否则 R 也不起作用 我假设你正在使用 JavaScript 结果在 colval rgb 200 10 1
  • 将专用 NV12 视频帧转换为 RGB

    我有一个使用 Android MediaCodec 解码的 H264 流 当我查询输出 MediaFormat 时 颜色格式为 2141391875 显然 这是一种专门的 NV12 变体 称为 HAL PIXEL FORMAT NV12 A
  • RGBA格式HEX转换成RGB格式HEX? PHP

    我想在 RGBA 格式的十六进制颜色之间来回转换 例如0xFF0000FF 和 RGB 格式的十六进制颜色 例如0xFF0000 在 PHP 中 我怎样才能做到这一点 这两个函数将满足您的需要 function rgbaToRgb rgba
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow
  • 以编程方式生成渐变?

    给定 2 个 RGB 颜色和一个矩形区域 我想在颜色之间生成基本的线性渐变 我进行了快速搜索 我唯一能找到的是这个博客条目 http jtauber com blog 2008 05 18 creating gradients progra

随机推荐

  • obsidian配合hugo的使用,让markdown本地编辑软件与在线化无缝衔接

    下载安装 点击打开obsidian官方网站 下载并安装 安装地址为 C Users 当前账号 AppData Local Obsidian C Users 当前账号 AppData Local obsidian updater 创建新库 起
  • Elasticsearch 之 数据索引

    对于提供全文检索的工具来说 索引时一个关键的过程 只有通过索引操作 才能对数据进行分析存储 创建倒排索引 从而让使用者查询到相关的信息 本篇就ES的数据索引操作相关的内容展开 更多内容参考 Elasticsearch资料汇总 索引操作 最简
  • Are you running in a Servlet container that supports JSR-356

    最近使用websocke出现以下问题 No javax websocket server ServerContainer ServletContext attribute Are you running in a Servlet conta
  • Docker-compose安装mysql

    介绍 本系列文章主要介绍使用docker compose部署mysql nginx redis等中间件 前后分离微服务项目部署流程 不介绍docker安装以及基础命令 话不多说首先进入mysql安装教学 操作 首先创建个目录用来存放dock
  • unity让一个物体从上到下消失_Unity3D中隐藏与显示物体的一些操作

    在使用unity3d开发游戏的过程中 我们常常会遇到需要隐藏或者显示的操作 针对这一点 下面做了一些总结 一 设置Renderer状态 在游戏的开发中 所有能够被渲染的物体都包含有一个Renderer组件 使用它可以将物体渲染到屏幕上 那么
  • linux shell脚本无法执行,报错syntax error near unexpected token `$'\r''解决方法

    最近一直忙于项目上的要求 在编写各种自动化安装的脚本 正好有一个需求是在之前的项目上编写过的 目前只需要拿来修改下即可 之前的shell脚本是在服务器上编写的 后来又已复制的方式存在在了电脑上 以txt文件的形式存放的 于是复制到了编辑工具
  • Spring知识点总结

    一 Spring框架介绍 Spring 是分层的 Java SE EE 应用 full stack 轻量级开源框架 以 IoC Inverse Of Control 反转控制 和 AOP Aspect Oriented Programmin
  • mybatis-mate相关配置

    Mybatis Mate 配置 mybatis mate cert grant 请添加微信wx153666购买授权 不白嫖从我做起 license SM hy2HGmqRZIw7NE5i1vKIiHOQLGXGymokyRCkR TYuNZ
  • html+jQuery自定义报告单

    html jQuery实现自定义报告单 功能 用户按需求自定义拼接生成报告单 支持打印功能 支持导出HTML CSS代码 截图 源码地址 customize report
  • java中byte和Byte详解

    写程序时 误把byte写作Byte 调试了许久 便将二者的区别及用法详细理解一遍 1 byte标题和Byte详解 byte是java的基本数据类型 存储整型数据 占据1个字节 8 bits 能够存储的数据范围是 128 127 Byte是j
  • Windows环境下ARM集成开发环境的搭建与使用

    Windows环境下能够使用Eclipse IDE for C C Developers来搭建ARM开发环境 本文地址 http blog csdn net u011833609 article details 30290655 安装过程例
  • 继续教育自动听课软件_2017继续教育挂机软件下载

    继续教育自动挂机软件2017是一款帮助用户挂机学习的辅助工具 有了它你就不用一直呆在电脑前了 它可以自动更新学习时间 自动换课计时 安全无病毒 方便快捷 省时省力省心 全国中小教师继续教育网的各种远程培训学习 全国各省份都能使用 使用教程
  • Valid注解在嵌套对象中校验失效

    接收对象声明 import lombok Data import javax validation constraints NotBlank import javax validation constraints NotNull impor
  • 数学的幽默打油诗

    1 常微分学常没分 数理方程没天理 实变函数学十遍 泛函分析心犯寒 微分拓扑躲不脱 随机过程随机过 微机原理闹危机 汇编语言不会编 量子力学量力学 机械制图机械制 2 高数 拉格朗日 傅立叶旁 我凝视你凹函数般的脸庞 微分了忧伤 积分了希望
  • 宁波到西塘可以坐火车去吗?

    宁波 嘉善 西塘宁波 嘉善火车 N406 N407 空调快速宁波15 10出发嘉善19 27到达4小时17分270公里硬座 42元硬卧 93元然后从嘉善打车到西塘 9公里 15元左右 坐快客3元也可以乘坐T794 空调特快宁波 10 41出
  • python 实现自动批量下载腾讯在线excel

    python 批量下载腾讯在线文档 如需要源代码供参考 可以留言邮箱 看到的话就发一下 pthon自动批量下载腾讯在线文档 对于大量实时更新维护的在线文档 可以随时轻松自动化批量下载在线文档 无需耗费人工下载 腾讯在线文档标签有时候会随版本
  • BP神经网络算法基本原理,BP神经网络算法流程图

    伤寒 副伤寒流行预测模型 BP神经网络 的建立 由于目前研究的各种数学模型或多或少存在使用条件的局限性 或使用方法的复杂性等问题 预测效果均不十分理想 距离实际应用仍有较大差距 NNT是Matlab中较为重要的一个工具箱 在实际应用中 BP
  • 爬虫中有关验证码的问题处理

    在爬虫中 经常要处理登陆的相关事宜 有时候登陆界面会需要提交验证码 如何处理验证码 解决办法 若是自己编写模块 需要涉及深度学习 这就是另一块大的内容了 在这里简单调用已经封装好的模块来实现获取验证码 本文以超级鹰为例 网址 http ww
  • PADS 原理图如何自动编号

    PADS原理图如何自动编号 PADS 原理图工具 PowerLogic exe 不支持元件位号重名 原生不提供自动编号功能 虽然 PowerPCB exe 可以支持元件位号自动编号功能再同步到原理图 但是其局限性太大没啥实际意义 另外 PA
  • YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB

    YUYV YVYU UYVY VYUY格式 它们都是YUV422的打包格式 即在内存中 Y U V都是挨着排序的 它们的名称就表示了Y U V的顺序 像YUYV 就是Y U Y V Y U Y V 在做转换时 就显得很容易 简单了 因为极其