初学音视频(一)-RGB和YUV格式分析
前言
- 有幸能够看到雷霄骅先生的博客,很感谢雷神能够这么无私把知识分享出来,对我这种新手的帮助实在是太大了。希望到另一个世界雷神不用再这么辛苦的。
- 本篇文章基本全是参考雷神的:视音频数据处理入门:RGB、YUV像素数据处理
- 学完这篇文章,任务本篇文章的核心就是YUV和RGB这种颜色编码在内存中是如何存储的,像BMP(或者JPG)封装格格式到底是什么东西的。
- 本篇文章是在C语言的基础上写的,因为我是做android的,最近才学了一点C语言基础的,刚好派上用场了。
- 需要的YUV,RGB等格式的查看工具:雷神分享了 这些工具和源文件 。在这些工具中一个叫:yuvplayer.exe的程序是可以查看YUV格式的内容的
实际操作
1.分离YUV420P像素数据中的Y、U、V分量
- 代码如下:
int main1(void){//打开一个文件 只读权限FILE *fp=fopen("/home/huangyu/HYtestYUV/lena_256x256_yuv420p.yuv","rb+");int a= access("/home/huangyu/HYtestYUV/lena_256x256_yuv420p.yuv",0);printf("a=%d",a);// 文件是否存在if( a != 0 ){printf("%s","the file isnot exit");}FILE *fp1=fopen("/home/huangyu/HYtestYUV/graybar_640x360y.y","wb+");FILE *fp2=fopen("/home/huangyu/HYtestYUV/graybar_640x360u.y","wb+");FILE *fp3=fopen("/home/huangyu/HYtestYUV/graybar_640x360v.y","wb+");int w=256;int h=256;//申请一个yuv420大小的内存空间unsigned char *pic=(unsigned char *)malloc(w*h*3/2);int num = 1;int i = 0 ;for (i = 0 ; i <num ; i++){//将fp文件的内容读取到pic内存中fread(pic , 1 , w*h*3/2 ,fp);//Y data//将pic内容一个字节一个字节写入fp1fwrite(pic , 1 , w*h , fp1);//U datafwrite(pic + w * h , 1 , w * h / 4 ,fp2);//V datafwrite(pic + w * h * 5 / 4 , 1 , w * h / 4 , fp3);}printf("%s","end work");free( pic );fclose ( fp );fclose ( fp1 );fclose ( fp2 );fclose ( fp3 );return 0;}
- 这个小点要了解YUV在内存中的存放方式,这个本身这个图片是420P的图片,420P的图片是4个Y对应一对UV,那么内存大小就是 宽度 * 高度(YYYY) + 宽度 * 高度/2(UV),这是数据量,在内存中的储存方式是YYYYYYYY….UU.VV.,这个的….是指前 宽 * 高 的byte中存储的全是YYYY的信息,然后才有UUUUUUUU…,把U存储完后才会存储VVVVVVV… 。
总结不下去了 简单的把重点的知识勾勒一下,明天继续
分离YUV420P像素数据中的Y、U、V分量和分离YUV444P像素数据中的Y、U、V分量这两个分割中
- 要了解420P和444P在内存中的存储方式,这个P代表了Planar这种存储方式,仔细看:http://blog.csdn.net/tkp2014/article/details/42110885。像素的采样位数一律为8bit这个概念还没弄清楚
- 软件查看YUV Y这种后缀文件的时候要转换格式和固定分辨率
- 这里注意 YUV在内存中的存储格式和YUV本身的排列格式是两个概念。
将YUV420P像素数据去掉颜色(变成灰度图) 、将YUV420P像素数据的亮度减半
- 这里要注意 为什么设置unsigned char *p来定义 把-128-127 转换成0-255 这样容易减半
- 这里注意数据对 颜色 和亮度的影响是如何造成的
将YUV420P像素数据的周围加上边框
加深对YUV420P这种存储方式的理解,可以用方形框框来描述这种存储方式的
生成YUV420P格式的灰阶测试图
一个算法而已
计算两个YUV420P像素数据的PSNR
- PSNR的概念,注意计算的方式就OK
- 我的取值一个是26 左右的, 还有我用U还是V的数据 进行比较的时候 数据是36
分离RGB24像素数据中的R、G、B分量
- 弄清楚RGB24这种图像在内存中的存储方式的
将RGB24格式像素数据封装为BMP图像
- bmp分装的格式 两个头里面都包括什么东西,目前还没有测试成功
将RGB24格式像素数据转换为YUV420P格式像素数据
- 这种转换的格式要记住
- 核心:
- 从源代码可以看出,本程序实现了RGB到YUV的转换公式:
Y= 0.299*R+0.587*G+0.114*B
U=-0.147*R-0.289*G+0.463*B
V= 0.615*R-0.515*G-0.100*B
要注意的地方
1) RGB24存储方式是Packed,YUV420P存储方式是Plander。
2) U,V在水平和垂直方向的取样数是Y的一半
生成RGB24格式的彩条(算法注意一下)
初学音视频(一)-RGB和YUV格式分析相关推荐
- 音视频 HLS协议和m3u8格式分析
什么是HLS HLS协议草案历史:https://datatracker.ietf.org/doc/rfc8216/ 可直接看:https://www.rfc-editor.org/rfc/rfc82 ...
- 走进音视频的世界——RGB与YUV格式
在图像的世界里,一般使用RGB作为存储格式.而在视频的世界里,一般使用YUV作为压缩存储格式.有时候面试官会问:为什么视频使用YUV来压缩存储,而不用RGB?YUV与RGB有什么区别,两者如何转换的? ...
- FFmpeg4入门07:解码视频并保存为YUV格式文件
上一篇我们解码并保存了其中的几帧确保解码过程和结果是对的.本篇我们将解码整个视频并保存为标准的YUV格式(YUV格式具体信息详见YUV格式介绍),我们就选YUV420P(I420)作为输出格式. 保存 ...
- 走进音视频的世界——Matroska封装格式的介绍(二)
Matroska封装格式非常灵活.兼容性好,既适用于本地文件存储又可以进行实时流传输.本篇文章主要探讨Matroska的编解码器映射,如何封装视频流.音频流.字幕流.如果要Matroska的介绍.功能 ...
- 实验二 RGB到YUV格式的转换
前言 将BMP文件转换成YUV文件 RGB存储结构 本算法使用的RGB文件格式为像素形式的RGB24文件.一个像素用24个bit来表示,3个字节,R,G,B分量分别用8个bit来表示,取值范围为0-2 ...
- RGB与YUV格式(四)
一.RGB 一般来说,直接采集到的视频数据是RGB24的格式RGB24一帧的大小size=width×heigth×3 Byte,RGB32的size=width×heigth×4Byte.1.RGB ...
- linux摄像头 sdl,Linux音视频(SDL与YUV)
SDL是一个比较底层的音视频处理库,很多UI系统的内核都用到它,我们还可以用它来处理摄像头中YUV数据. 拓展: SDL(Simple DirectMedia Layer)是一个跨平台的底层开发库,提 ...
- Metal之探究理解视频渲染RGB与YUV颜色编码
一.颜色编码 ① RGB 颜色编码 RGB 三个字母分别代表了 红.绿.蓝,这三种颜色作为三个基底颜色,将它们以不同的比例相加,可以产生多种多样的颜色. RGB 图像中,每个像素点都有红.绿.蓝三个基 ...
- RGB与YUV格式简介
(1) RGB格式简介 RGB色彩模式是一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的.图像中每一个像素的RGB分量都分配一个0~25 ...
最新文章
- 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint
- 一台 Java 服务器可以跑多少个线程?
- zh-cn 与 zh-hans 是什么关系、有什么区别
- linux下根据进程查找文件启动文件
- oracle输出异常,表导出出现异常,无法继续。
- 震惊,用了这么多年的 CPU 利用率,其实是错的
- 【HDOJ】2809 God of War
- C++面试题-面向对象-静态成员变量以及静态成员函数
- 生产力系统的四类要素
- 【STM32 .Net MF开发板学习-16】Zigbee遥控智能小车
- asp.net MVC初学体会.
- 会计计算机,什么是好的计算机会计软件?
- 适合智能电视的K歌神器,纯麦U7PRO麦克风体验
- gta5服务器端文件夹,GTA5路径在steam哪个文件夹里面
- android 语音留言功能,不想接电话怎么办?中移动语音信箱Android版测评
- 微服务Feign调用后开启Schedule报错No thread-bound request found: Are you referring to request attributes outsid
- 用python做系统的感悟_python感悟
- ILRuntime篇:介绍并下载运行官方案例
- 历年四级作文真题范文
- CICS集群安装相关要点记录