RAW、RGB 、YUV三种图像格式理解
文章目录
- 1. 背景
- 2. 相关概念
- 2.1 颜色与色彩空间
- 2.2 RAW图像
- 2.3 RGB图像
- 2.4 YUV图像
- 3. 分类简图
1. 背景
在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认知的理解下,现在将相关理解记录。
2. 相关概念
2.1 颜色与色彩空间
- 颜色
- 颜色是人眼感知到的现象,它是由光波的频率和强度所决定的,仅仅存在于人的眼睛和大脑中,因此为了方便描述颜色,引入了色彩空间。
- 色彩空间
- 色彩空间(Color Space)是用于描述、定义和组织颜色的一种方法,它是一个三维坐标系,其中每个坐标都代表一种颜色。在计算机图形学中,色彩空间被广泛应用于调整、转换和操纵颜色。在色彩空间中,经常使用的三种坐标是 RGB(红色、绿色、蓝色)。
- RGB:常用于在显示器或电视屏幕上显示颜色,使用红、绿和蓝三种原色来组合出各种颜色,是一种加法颜色模型。
- 色彩空间(Color Space)是用于描述、定义和组织颜色的一种方法,它是一个三维坐标系,其中每个坐标都代表一种颜色。在计算机图形学中,色彩空间被广泛应用于调整、转换和操纵颜色。在色彩空间中,经常使用的三种坐标是 RGB(红色、绿色、蓝色)。
色彩空间
2.2 RAW图像
-
RAW
- RAW 图像是指图像传感器数字图像,这种图像未经过任何处理,未压缩和未降噪,保留了其原始数据,以便后续的数字后期制作和处理。
-
采集过程
- 环境光/补光灯照在物理表面形成反射 –> 镜头汇聚光线 –> 图像传感器彩色滤镜阵列(CFA)将单色光照在光电二极管 –> 光电转换 –> ADC采集,其他模块转换排列为 设置的 bayer格式的RAW。
RAW 一般是使用 bayer 格式进行排列,每个像素实际只包含单种特定颜色 的光的强度(比如单个像素只能为R/G/B亮度信息)。
彩色滤镜CFA
由于人眼对于绿色更加敏感,所以加重了其在感光点的权重,Bayer格式中的G分量都是B、R分量的两倍。
-
bayer 序格式按照排列组合,一共分为4种:
排列1 排列2 排列3 排列4 RG
GBBG
GRGR
BGGB
RG
2.3 RGB图像
RGB 图像是一种数字图像格式,其名称既指代了该图像格式所使用的颜色空间(红、绿、蓝),也指代了图像本身,其中包含了红、绿、蓝三色通道的像素值。
在 RGB 空间中的颜色可以通过各种亮度级别的三种原色进行表示,通常使用 8 位整数值(0-255)来描述每个通道的亮度级别。因此,成像设备所成功捕捉到的颜色信息可以进行比较精确的映射和表示。
常用的 RGB 格式包括颜色通道的信息位数、每种颜色可以表示的颜色数量和典型应用场景等。
RGB 格式 | 颜色通道信息位数 | 可表示的颜色数量 | 典型应用场景 |
---|---|---|---|
RGB888 | 每种通道均为 8 位 | 16,777,216 | 数字图像处理、计算机游戏、电影和摄影等 |
RGB565 | R: 5位, G: 6位, B: 5位 | 65,536 | 嵌入式应用、机器视觉、数字标志等 |
RGBA8888 | R,G,B 各 8 位,A 通道为 8 位 | 16,777,216 | 图像编辑、视觉效果、移动应用等 |
RGB332 | 每个通道均为 3 位,共 8 位 | 256 | 简单图形、低成本设备、老式显示器等 |
注意,这里列出的应用场景只是典型的用途,实际应用还要根据具体情况进行选择。
2.4 YUV图像
YUV 图像是一种将图像亮度(Y)和颜色(U、V)分离的数字图像格式,常用于视频编码和数字图像处理的领域。下面介绍一下常见的 YUV 采样与排列方式。
- YUV 采样方式
在 YUV 图像格式中,针对颜色信息的采样方式有以下几种:
-
4:4:4:Y、U、V 三个分量的采样比例均为 1:1,没有任何采样压缩,图像质量最高,但是处理的数据量也最大,需要更多的存储和传输带宽。
-
4:2:2:Y 分量的采样比例为 1:1,U、V 分量的采样比例为 1:2,即在水平方向上每两个 Y 像素对应一个 UV 像素,垂直方向上不进行压缩,可支持更多的压缩算法和更高的编码效率。
-
4:2:0:Y 分量的采样比例为 1:1,U、V 分量的采样比例为 1:2,即在水平和垂直方向上每两个 Y 像素对应一个 UV 像素。是很多视频编解码标准的默认格式之一,可在较小的数据量和带宽开销下,实现较高的编解码效率。
-
4:1:1:Y 分量的采样比例为 1:1,U、V 分量的采样比例为 1:4,即在水平方向上每四个 Y 像素对应一个 UV 像素,垂直方向上不进行压缩,在一些比较老旧的视频编解码标准中可能会使用。
- YUV 排列方式
在 YUV 图像格式中,针对采样后的 Y、U、V 分量的排列方式有以下几种:
-
Planar:将 Y、U、V 三个分量单独存放在不同的内存区域中,每个分量都是独立的一维数组,三个数组都存储着相同的宽度和高度。
-
Packed:将 Y、U、V 三个分量数据以一种交叉存储的方式来存放,三个分量紧密地排列在内存中,常见的排列方式有 YYUV、YVYU、UYVY 等。
-
Semi-Planar:将 U、V 两个色度分量合并在一起作为一个独立的数组 VU(或者 UV),与亮度分量 Y 组成一个二维数组,常见的排列方式有 YUV420、YUV422 等。
-
Interleaved:将 RGB 24 位像素格式进行 YUV 转换后得到的 YUV422_YUYV 格式,即 YUV 分量以交错方式存储在内存中,Y 和 U、V 之间依次交替进行存储。
总之,对于 YUV 图像格式,常见的采样方式包括 4:4:4、4:2:2、4:2:0 和 4:1:1 等,常见的排列方式包括 Planar、Packed、Semi-Planar 和 Interleaved 等。根据不同的应用场景和编解码标准的需求,通常会选择不同的采样和排列方式。
下面是YV12(YUV420)格式简图以及内部排布图:
3. 分类简图
分类简图图片来自网络,如有侵权,联系删除
相关文章:

RAW、RGB 、YUV三种图像格式理解
文章目录 1. 背景2. 相关概念2.1 颜色与色彩空间2.2 RAW图像2.3 RGB图像2.4 YUV图像 3. 分类简图 RAW、RGB 、YUV三种图像格式理解 1. 背景 在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认…...
关于对【mysql存储过程】的理解与简述
【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130857854 出自【进步*于辰的博客】 【存储过程】这个知识点,我在大二下期学习【mys…...
贪吃蛇游戏的制作记录
关于蛇的实现代码 #include "snake.h" #include "globalvar.h" #include <graphics.h> int fangXiang 1;//方向 0 右 1 上 2 左 3 下 int snakeHang[100] { 10,11,12,13,14 };//蛇 每节所在行 int snakeLie[100] { 10,10,10,10,10 };//蛇 每节所…...
Go基础入门
Go是一种现代的、高效的、开源的编程语言,由Google开发。它的语法简洁、易于学习和使用,支持并发编程,特别适合构建网络应用和分布式系统。本篇文章将介绍Go语言的基础语法和常用特性,帮助初学者快速入门。 一、Go语言的基础语法…...

JavaScript教程(二)
BOM浏览器对象模型 什么是BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window;BOM由一系列相关的对象构成,并且每个对象都提供了很多方…...
设计模式之代理模式
代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问。 因为代理类与服务类实现同样的接口,所以代理类能代替服务类提供给客户端。当客户端使用代理类时,代理类能对请求进行处理(例如增加访问控制、缓存请求结果、隐…...

初识MySQL
💕与其抱怨生活的不公,不如积极行动改变它。💕 🐼作者:不能再留遗憾了🐼 🎆专栏:MySQL学习🎆 🚗本文章主要内容:简单了解什么是MySQL、MySQL的发展…...
内网渗透(八十五)之ADCS证书服务攻击
ADCS证书服务攻击 漏洞背景 2021年6月17日,国外安全研究员 Will Schroeder 和 Lee Christensen 共同发布了针对ADCS(Active Directory Certificate Service, 活动目录证书服务)的攻击手法。同年8月5日,在Black Hat 2021上 Will Schroeder 和 Lee CHristensen 对该攻击手法进…...

通过python封装1688图片搜索商品数据接口,拍立淘API接口
1688图片搜索API封装接口是一个可以帮助用户快速使用1688图片搜索API的接口封装库。该接口封装库可以帮助用户快速引入1688图片搜索API,并提供各种参数配置和封装的API调用方法,以方便用户快速实现自己的图片搜索需求。 该接口封装库将1688图片搜索API的…...
HashMap的源码分析(基于JDK1.8)
HashMap的源码分析(基于JDK1.8) Java中的HashMap是一种常用的数据结构,它是基于哈希表的数据结构,可以用来存储键值对。在HashMap中,每个键值对被称作一个Entry,每个Entry包含一个键和一个值。HashMap的实…...
算法能力-数据安全复合治理框架和模型解读(5)
数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,落地数据安全治理科技水平差异直接决定产品和项目是否可持续性,当前和未来更需要专业和有效创新。数据安全治理…...

java从入门到起飞——基础概念
目录 背景注释和关键字注释关键字 常量变量数据类型计算存储单元数据类型分类 标识符小驼峰命名法(方法、变量)大驼峰命名法(类) 类型转换自动类型转换强制类型转换 计算机中的数据存储总结 背景 学编程这么长时间了,重…...
C语言判断队列满or空
1 静态数组队列 循环队列通常使用数组来实现,判别循环队列是否满或空,可以借助两个变量front和rear。 判空:当front和rear相等时,队列为空。 判满:当(front 1) % n rear时,队列为满,其中n为…...
系统中级集成项目管理工程师(中项)好考吗?
软考系统集成项目管理工程师是一项非常重要的考试,对于从事信息技术和管理方面的人员来说,这是一个非常有用的证书。 对于零基础的考生来说,软考系统集成项目管理工程师是否好考,主要取决于他们的学习态度和学习方法。 一般而言…...

【Java多线程进阶】CAS机制
前言 CAS指的是Compare-And-Swap(比较与交换),它是一种多线程同步的技术,常用于实现无锁算法,从而提高多线程程序的性能和扩展性。本篇文章具体讲解如何使用 CAS 的机制以及 CAS 机制带来的问题。 目录 1. 什么是CAS&…...
flex布局总结
flex布局总结 总结自:https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 内容: flex意思是-弹性布局,可以为盒型模型提供极大的灵活性,设置为flex布局后,子元素的fload clear vertical会失效 概念&#x…...

2023 Idea 热部署 JRebel 插件激活方法
2023 Idea 热部署 JRebel 插件激活方法 1. 下载源代码 进入下面 github 地址 clone 代码到本地 https://github.com/Byron4j/JrebelLicenseServerforJava 2. 编译和打包 cd /Users/daixiaohu/Desktop/JrebelLicenseServerforJavamvn clean package3. 运行项目 cd target/jav…...
Java (韩老师课程)第三章
变量的介绍 * 变量是程序的基本组成单位 * 变量相当于内存中一个数据存储空间的表示 * 变量在该区域有自己的名称和类型 * 变量必须先声明,后使用,即顺序 * 变量在该区域的数据/值可以在同一类型内不断变化 * 变量在同一个作用域中不能重…...

【P38】JMeter 随机控制器(Random Controller)
文章目录 一、随机控制器(Random Controller)参数说明二、测试计划设计2.1、测试计划一2.2、测试计划二2.3、勾选忽略子控制器块 一、随机控制器(Random Controller)参数说明 可以让控制器内部的逻辑随机执行一个,一般…...

API电商 ERP 数据管理
没有 API,应用之间的通信将会被扼杀;软件开发者将不断重写并执行相同功能的软件;创新的脚步将会放缓。 API 随处可见。大到一个软件系统,小到几行程序,只要具备了一定的特征,都可以被称作 API。那么&#…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...