颜色的数字化描述(RGB与YUV的简介)

 以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考内容

(1)YUV和RGB的相互转换实验_Geek.Fan的博客-CSDN博客

(2) 工作中用到的一些基础知识

(3)YUV422 YUV420 Planar \ Semi-Planar \ Interleaved格式详解

(4)YUV 和 YCbCr 的差别 - 胡永光 - 博客园

一、颜色的学问

(1)颜色的本质是光的波长,但是因为有人去看才有了颜色这个概念。

(2)颜色的三个关键:亮度(亮暗程度)、色度(什么颜色)、饱和度(厚重浅薄感)。

(3)可以用“ 色彩空间 ”(RGB、YUV等)这个概念,数字化地表示一种颜色。

二、图像采集过程

(1)图像采集过程:光照在成像物体被反射>>镜头汇聚>>Sensor光电转换>>ADC为rawRGB。

(2)sensor上的每个像素硬件单元(或者说光电转换器)只能采集特定颜色的光的强度,因此每个像素只能为R或G或B。这些由sensor像素硬件单元得到的原始数据,就是rawRGB。

(3)将rawRGB进行转换(比如附近加权)得到我们熟知的RGB(每个像素点由RGB组成)。

(4)图像显示的要素:分辨率(一共多少像素)、pitch(像素与像素之间的距离)、观看距离。如果是视频,还需要考虑帧率。

(5)图像的表达、压缩、修整等相关技术,就发生在rawRGB以后的各个环节。

三、RGB方式表示颜色      

1、RGB格式

RGB格式有以下:RGB555、RGB565、RGB888(或者叫RGB24,即真彩色)、ARGB(或者叫RGB32,其中A表示透明度)等。其中RGB后面的数字表示分别用多少bit来表示R、G、B这三个分量(或者说通道)的亮度。

比如RGB565,使用16bit来表示一个像素,其中用5bit表示R分量,用6bit表示G分量,用5bit表示B分量。程序中使用一个字(两个字节)来操作RGB565格式的一个像素,各个bit的含义如下。

[高字节]  R R R R R G G G G G G B B B B B  [低字节]

我们通过使用屏蔽字和移位操作,可以得到RGB各分量的值。

2、RGB的本质

将色度分解为R、G、B三个分量,然后记录下各个分量的亮度。

如果采用RGB888格式,则每个分量有256阶亮度。当三个分量的亮度相同时,会得到灰色调(三个分量的亮度值都为0时是黑色,都为255时是白色,黑色与白色之间的就是灰色),此时的亮度也叫灰度值。

3、RGB的优势与劣势

(1)广泛应用于数字化的、彩色的显示器、计算机编程如opencv等领域。

(2)与传统灰度图(只有亮度信息)的兼容性不好,表达颜色的效率不高(即占用内存大)。

四、YUV方式表示颜色

1、YUV的简介

YUV也是一种色彩空间,其中Y表示亮度,U和V表示色度。只有Y就是黑白图像,再加上UV就是彩色图像了,因此兼容彩色系统和传统黑白系统。

2、YUV和RGB的对比

两者都是用来表达颜色的数学方法,但对颜色的描述思路和方法不同。RGB将一个颜色拆解为3个色度的亮度组合,YUV将一个颜色分解为2个色度与1个亮度的组合。RGB和YUV之间可以用数学方法互相换算,具体方法见参考内容(1),是一个典型的浮点运算过程。

3、YUV和YCbCr的对比

两者基本一样,具体介绍见参考内容(4)。

4、YUV的格式分类

YUV格式分为packed和planar两种,具体介绍见参考内容(2)。

假如有四个像素,每个像素都有一个YUV,即Y0U0V0、Y1U1V1、Y2U2V2、Y3U3V3。

对于packed,这四个像素的数据是这样编排的:[Y0,U0,V0]、[Y1,U1,V1]、[Y2,U2,V2]、[Y3,U3,V3]。即将YUV分量存放在同一个数组中。

对于planar,这四个像素的数据是这样编排的:[Y0,Y1,Y2,Y3]、[U0,U1,U2,U3]、[V0,V1,V2,V3]。即使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。

对于semi planar,这四个像素的数据是这样编排的:[Y0,Y1,Y2,Y3]、[U0,V0]、[U1,V1]、[U2,V2]、[U3,V3]。

这两种格式各有优势。比如只想获取一部分图像的信息,那么packed格式的就比planar格式好,因为可以直接读取packed格式的部分数组,而plannar需要读取全部数组中。比如只想调亮画面,那么plannar就比packed好,因为直接修改plannar的亮度数组就好。

5、YUV相关的概念

下面是与YUV相关的概念,具体介绍参考内容(2)(3)。

YUYV(2个Y1个U1个V,应该就是YUV422?)

YUV422(即2*2像素点,共有4个Y、2个U和2个V。)

YUV420(其实叫YUV411更合适,2*2像素点,共有4个Y、1个U和1个V。)

YUV422 planar(即YUV422P)

YUV420 Planar(即YUV420P)

YUV422 semi planar(即YUV422SP)

YUV420 semi Planar(即YUV420SP)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android界面的滑动切换功能

左右滑动切换是几乎所有应用中都会用到的功能。在这里将相关资源进行总结 (1)viewflipper结合手势检测进行左右滑动。 http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html 这种方法很简单,但是大概效果不是很理想&#xff08…

softlayer virtual machine vhd磁盘镜像导入shell脚本

softlayer virtual machine vhd磁盘镜像导入shell脚本 脚本 测试上传; 20480 records in20480 records out2147483648 bytes (2.1 GB) copied, 44.2262 s, 48.6 MB/scurl: option --data-binary: out of memorycurl: try curl --help or curl --manual for more information 28…

android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...

ListViewTimer列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)项目中有时会遇到列表中含有倒计时或者是计时器的需求,实现的方式有很多种,此Demo中是使用Thread Handler实时的对item的局部进行刷新达到计时或倒计时的功能本项目中实现的是计…

Linux 查看当前日期和时间

一、查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 : "tzselect" 方法 B 仅限于RedHat Linux 和 CentOS 命令 : "timeconfig" 方法 C 适用于Debian 命令 &…

第二季1:MPP模块概述

以下内容源于海思官方文档内容,如有侵权请告知删除。 一、MPP模块概述 海思的媒体处理软件平台(MPP,Media Process Platform)有利于应用软件的快速开发。因为该平台屏蔽了一些与芯片相关的复杂的底层处理,给应用软件提…

codeblocks

用来写c的 http://www.codeblocks.org/downloads/26#windows 选择codeblocks-13.12mingw-setup.exe自带gnu gcc compiler 安装后设置gcc compiler settings -> compiler -> 在顶上的selected compiler中选择gnu gcc compiler -> 选择下面一行的toolchain executables中…

小米平板安装鸿蒙系统,【新机】安卓最强平板?MatePad Pro2曝光:预装鸿蒙OS | 小米平板5到底啥时候发布?...

目前安卓阵营还在好好做平板的可能也就是三星和华为了,至少整体的配置规格都还不错。根据爆料,华为将会在近期推出MatePad Pro 2代产品,预计6月份正式和大家见面。MatePadPro2将会搭载麒麟9000处理器,算是目前安卓平板里性能最强的…

第二季3:sample_venc.c的整体分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、sample文件夹的介绍 将mpp/sample文件夹以及mpp/include文件夹导入SI后,搜索main时可以发现很多main函数。这说明sample文件夹下有很多例程,每个例程面向一个典型应用。…

〖Linux〗穿越城墙之后,直接连接国内网站的路由配置

因为有需要做Android相关的开发工作,很多时候要穿越之后才能做事情; 如Android文件加密预研、Android NDK/SDK的下载,都需要使用得到Google; 但是穿越之后,访问国内网站就不是那么方便了,所以,写…

android自动化持续集成,Android系统的持续集成自动化测试框架的研究与实践

摘要:近几年,Android系统占据着智能移动设备操作系统领域中极大的市场份额。随着Android市场中软件数量的不断攀升,移动用户对Android应用的质量要求也越来越高。如何保证Android软件的质量,成为移动应用领域中亟待解决的问题。重视移动应用的测试工作,是提高Androi…

poj 2891 Strange Way to Express Integers

题目&#xff1a;http://poj.org/problem?id2891 思路&#xff1a;扩展欧几里得 #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; #define maxn 100010 int n; long lo…

第二季4:SAMPLE_VENC_1080P_CLASSIC函数的总流程

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 函数SAMPLE_VENC_1080P_CLASSIC()有七个大步骤。 step 1: init sys variable&#xff0c;即初始化&#xff08;填充&#xff09;mpp系统的变量、参数。 step 2: mpp system init&#xff0c;即初始化…

读书笔记2014第13本:《富爸爸,穷爸爸》

早就收藏了《富爸爸&#xff0c;穷爸爸》这本书&#xff0c;一直没看&#xff0c;最近仔细翻看一遍&#xff0c;发现自己智商一般&#xff0c;情商不行&#xff0c;原来财商更差&#xff0c;连书里的穷爸爸也比不上。这本书在这个时代再看&#xff0c;已经跟不上形势的发展了&a…

html里嵌入语音,HTML5语音合成API语音/语言支持

我正在尝试在html5中使用语音合成来用阿拉伯语讲话,但它不起作用.我运行以下脚本来检查chrome支持的语言,阿拉伯语不是其中之一.window.addEventListener("DOMContentLoaded",function () {if (window.speechSynthesis ! undefined) {document.getElementById("…

Eclipse RCP使用SWT.EMBEDDED方式显示batik的svgCanvas后窗口最大化变白问题

// 设置svg组件一直动态&#xff08;这一行代码导致了最大化变白的问题&#xff09;svgCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);// 以下两行解决最大化变白问题&#xff08;具体原理不详&#xff09;svgCanvas.setDoubleBuffered(false);svgCanvas.setDoubleBuffe…

第三季1:ORTP库的移植与视频的实时传输实验

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 本节内容是移植ORTP库&#xff0c;并使用ORTP库来完成视频的实时传输。 一、ORTP的简介 1、视频网络传输的两种方式 &#xff08;1&#xff09;基于下载的方式。比如http&#xff08;Hyper Text T…

cocos2d-x实例学习之常用类及其概要作用

CCLayer,CCScene CCLayer类对应cocos2d-x引擎里的布景。每个游戏场景中都可以有很多层&#xff0c;每一层负责各自的任务&#xff0c;例如专门负责显示背景、专门负责显示道具和专门负责显示人物角色等。在每个层上面可以放置不同的元素&#xff0c;包括文本、精灵和菜单等。CC…

HTML能用作网页开发语言吗,[单选题] 以下语言本身不能作为网页开发语言的是(  )。...

参考解析&#xff1a;(1)【解题步骤】步骤1&#xff1a;通过“答题”菜单打开WORD1.DOCX文件&#xff0c;按题目要求替换文字。选中全部文本(包括标题段)&#xff0c;在【开始】功能区的【编辑】分组中&#xff0c;单击“替换”按钮&#xff0c;弹出“查找和替换”对话框。在“…

第三季2:ORTP库与RTP发送实验的源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 本文首先分析ORTP库的组成&#xff0c;然后以rtpsend.c为例说明ORTP库的使用方法&#xff0c;最后分析第三季1中的RTP发送实验的源码。 一、ORTP库的源码分析 1、ORTP库概览 &#xff08;1&#…

线程让出实验【RT-Thread学习笔记 4】

API: rt_thread_yield 线程函数中调用&#xff0c;本线程释放MCU。如果此时有别的相同优先级的任务整处于等待状态&#xff0c;将获得MCU使用权。 线程让出就是给OS增加一个任务调度的机会。 创建两个线程&#xff0c;观察他们的结果&#xff1a; //线程让出试验 void yield_te…