一、RGB格式图片原理

前面讲了一帧YUV图像是由Y(亮度)U(色度)V(色度)来表示的,而RGB图像是由R(红色)G(绿色)B(蓝色)三个分量来表示的。

二、RGB格式图片数据的内部排列

RGB格式的图片,比较常见的有如下三种:

1.RGB16(16位)

顾名思义,RGB16是以16位(2个字节)为一个存储单元,来存储一个RGB像素。RGB16又有以下两种比较常见的存储形式

1.1 RGB565

这里每个像素点用16位(2个字节)来表示,R、G、B分量分别占用了5位、6位、5位,内部排列如下所示

高字节                     低字节
R R R R R G G G G G G B B B B B
2.2 RGB555

这里每个像素点依旧用16位(2个字节)来表示,最高位不使用,R、G、B分量分别占用了5位,5位,5位。内部排列如下所示

高字节                      低字节
空 R R R R R G G G G G B B B B B

2.RGB24(24位)

RGB24是将24位的数据,分成3份,分别去存储R、G、B分量。所以每个分量占的大小应是8位(1个字节)。这里需要注意的是:R、G、B分量存储的顺序,从高字节到低字节,必须是以B G R的顺序来存储。为什么这里要强调从高字节到低字节,因为后续如果进行图片格式转换,遇到字节序不一致,需要对应地进行转换。内部排列如下所示

高字节                                    低字节
B B B B B B B B G G G G G G G G R R R R R R R R

3.RGB32(32位)

RGB32中,每个像素点用32位(4个字节)来表示。这里存储的顺序和RGB24一样,这里不再过多赘述。唯一不同的是,在低字节处保留了8位。内部排列如下所示

高字节
B B B B B B B B G G G G G G G G低字节
R R R R R R R R N N N N N N N N(N就是空的意思,hhh)

三、编程分离R G B分量

下面我们来编程分离一张RGB24格式图片中的R,G,B分量

#include <stdio.h>
#include <stdlib.h>/*para:     fileName  输入文件名width     宽height    高
*/
int rgb24Split(char *fileName, int width, int height)
{FILE *fp = fopen(fileName, "rb+");FILE *fp1 = fopen("output_r.y", "wb+");FILE *fp2 = fopen("output_g.y", "wb+");FILE *fp3 = fopen("output_b.y", "wb+");unsigned char *buffer = (unsigned char *)malloc(width * height * 3);fread(buffer, 1, width * height * 3, fp);for (int i = 0; i < width * height * 3; i = i + 3){//Rfwrite(buffer + i, 1, 1, fp1);//Gfwrite(buffer + i + 1, 1, 1, fp2);//Bfwrite(buffer + i + 2, 1, 1, fp3);}free(buffer);fclose(fp);fclose(fp1);fclose(fp2);fclose(fp3);return 0;
}/* a test file to split r g b */
int main()
{rgb24Split("cie1931_500x500.rgb", 500, 500);return 0;
}

首先我们打开原图片

我们这里分离了R,G,B三原色,可能看到这里有的同学要问,为什么不是以B,G,R的顺序写入,因为先前说过字节序的问题,所以这里应该是以R,G,B的顺序写入。
我们把每个数据都单独存储到文件中,所以不能算是一帧RGB图像了,所以我们以“Y(只看亮度)”的格式去打开这些文件,查看某种颜色的强度
由观察得知,这张图片左上角绿色的强度偏大,右边的红色强度偏大,左下角则是蓝色的强度偏大。
下面看一下我们分离出的图片
分离出的R数据图像

分离出的G数据图像

分离出的B数据图像

音视频入门(二) - RGB像素处理相关推荐

  1. 音视频入门-11-PNG文件格式详解

    音视频入门文章目录 PNG 文件格式解析 PNG 图像格式文件由一个 8 字节的 PNG 文件署名域和 3 个以上的后续数据块(IHDR.IDAT.IEND)组成. PNG 文件包括 8 字节文件署名 ...

  2. 安卓音视频入门难,老司机分享音视频开发学习技巧与痛点

    最近在写文章的时候,发现很多读者给我私信提问,想了解安卓音视频这块, 很多同学也对音视频开发有点浓厚的兴趣,但奈何没有系统的学习知识,仅靠自己苦苦钻研确实力不从心,今天就借这个机会分享一下我学习音视频 ...

  3. 音视频入门-02-RGB拼图

    音视频入门文章目录 图片 & 像素点 & RGB 平时浏览的图片看不出像素点: 图片放大时,可以看出图片是一个个像素点组成的: 每个像素点的颜色可以用 RGB 表示: RGB 拼图 既 ...

  4. 音视频入门之如何绘制一张图片

    Android 的音视频入门学习,首先了解一下绘制图片.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View作绘制图片.下 ...

  5. 音视频入门-17-GIF文件格式详解

    * 音视频入门文章目录 * GIF 文件格式解析 图像互换格式主要分为两个版本,即图像互换格式 87a 和图像互换格式 89a. 图像互换格式 87a:是在 1987 年制定的版本. 图像互换格式 8 ...

  6. 音视频入门系列-音视频基础知识篇(录播、点播、直播)

    在学习音视频技术前,笔者还是希望可以分享给小伙伴们一些音视频方便的基本概念,掌握这些概念,有助于大家对于音视频有一个更直观和清晰的了解. 话不多说,今天笔者给大家分享下:录播.点播和直播. 录播:录播 ...

  7. 音视频入门系列-服务器篇(nginx-rtmp 的部署)

    本篇文章,我们详细介绍下使用nginx-rtmp来部署一套流媒体服务器,并用FFmpeg来推流,VLC来拉流. RTMP是Real Time Messaging Protocol(实时消息传输协议)的 ...

  8. 吹爆系列:教科书级别的Android音视频入门进阶学习手册,学完我成功“挤进”了抖音音视频开发岗

    Android开发工作两年,真的是感觉Android应用层开发没什么前景了,于是打算在网络安全,智能硬件,音视频这几个方向发展,考虑了一段时间,最终决定选择音视频.理由就不说了,既然选择了就要好好深耕 ...

  9. 音视频入门系列-音频篇(AAC)

    上篇文章介绍了PCM相关知识,本篇介绍下AAC相关知识. 1.什么是AAC? AAC(Advanced Audio Coding,高级音频编码)是一种声音数据的文件压缩格式.AAC分为ADIF和ADT ...

  10. 堪称教科书级别的Android音视频入门进阶学习手册,开源分享

    概述 随着整个互联网的崛起,数据传递的形式也在不断升级变化,总的流行趋势如下: 纯文本的短信,QQ -> 空间,微博,朋友圈的图片文字结合 -> 微信语音 -> 各大直播软件 -&g ...

最新文章

  1. Linux期末复习题库(1)
  2. python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏
  3. 计算机hub体系部件,原来如此!USB Hub接口为啥都是4个7个或10个?
  4. 银行真的已经是夕阳行业了吗?
  5. 4-----Scrapy框架中选择器的用法
  6. 比IETEST更好用的浏览器兼容性测试软件[绿色]
  7. 前端学习(2011)vue之电商管理系统电商系统之初步使用upload上传组件
  8. [转载] Java之继承
  9. JS 查看标签下某元素所有信息(查看元素,查询元素,遍历元素、HTMLCollection对象、NodeList对象)
  10. Linux 用户组权限讲解
  11. git修改已提交记录的注释
  12. postman中文设置_严选 | Elastic中文社区201902错题本
  13. pwershell custom objects
  14. Python字符串处理的8招秘籍
  15. SQL Express
  16. 基于MThings完成MODBUS设备在线状态扫描
  17. Web开发之分页功能
  18. php实现facebook登陆功能
  19. 一文带你深入了解Linux IIO 子系统
  20. springboot+网络空间安全实验教学中心门户网站 毕业设计-附源码191220

热门文章

  1. Redis学习篇2_windows下载redis3.2.10版本
  2. dB 的 由来与详解
  3. (附源码)计算机毕业设计SSM火车票预定管理系统
  4. 规模划分电子计算机,电子计算机按规模划分,可以分为_____。
  5. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)
  6. 深入理解单例模式:静态内部类单例原理
  7. 傅里叶-梅林变换实现图像配准
  8. Vue 获取DOM元素 ,给DOM增加事件的特殊情况
  9. linux系列之-xsel
  10. [强烈推荐]Mini Delphi 2005 v1.2 For Win32 绿色便携版