* 音视频入门文章目录 * YUV & YCbCr 简介 YUV,是一种颜色编码方法.常使用在各个视频处理组件中. YUV 在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽. Y 表示明亮度(Luminance或Luma),也就是灰阶值,U 和 V 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色. Y'CbCr 不是一种绝对的色彩空间,是一种针对 RGB 资讯所做的编码.真正的颜色显示是根据实际 RGB 色盘(colorant…
* 音视频入门文章目录 * 介绍开源库 使用第三方开源库来简化开发,屏蔽一些底层的复杂度,节省大量编写代码的时间. libyuv: Google 开源的实现各种 YUV 与 RGB 之间相互转换.旋转.缩放的库. yuv2rgb:C library for fast image conversion between yuv420p and rgb24. 使用开源库 libyuv FFmpeg 生成代码所需文件: ffmpeg -i rainbow.bmp -video_size 700x700…
* 音视频入门文章目录 * YUV & RGB 相互转换公式 YCbCr 的 Y 与 YUV 中的 Y 含义一致,Cb 和 Cr 与 UV 同样都指色彩,Cb 指蓝色色度,Cr 指红色色度,在应用上很广泛,JPEG.MPEG.DVD.摄影机.数字电视等皆采此一格式. 因此一般俗称的 YUV 大多是指 YCbCr . RGB to YUV(YCbCr) RGB 范围 [0,255],Y 范围 [16,235] ,UV 范围 [16,239].如果计算结果超过了取值范围要进行截取. Y = 0.25…
* 音视频入门文章目录 * libyuv libyuv 是 Google 开源的实现各种 YUV 与 RGB 之间相互转换.旋转.缩放等的库.它是跨平台的,可在 Windows.Linux.Mac.Android 等操作系统,x86.x64.arm 架构上进行编译运行,支持 SSE.AVX.NEON 等 SIMD 指令加速. 准备工作 一张图片 下载 rainbow-700x700.bmp BMP 图片 或者 自己准备一张图片(知道分辨率,如:700x700) FFmpeg 工具包 FFmpeg…
* 音视频入门文章目录 * RGB 简介 RGB 色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红.绿.蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一. RGB格式 RGB16 格式 RGB16 数据格式主要有两种:RGB565 和 RGB555. 1. RGB565 每个像素用 16 比特位表示,占 2 个字节,R,G,B 分量分别使用 5 位.6…
* 音视频入门文章目录 * PNG 文件格式解析 PNG 图像格式文件由一个 8 字节的 PNG 文件署名域和 3 个以上的后续数据块(IHDR.IDAT.IEND)组成. PNG 文件包括 8 字节文件署名(89 50 4E 47 0D 0A 1A 0A,十六进制),用来识别 PNG 格式. 用十六进制查看器打开任意一个 PNG 文件,都是可以看到这样的头部: PNG 定义了两种类型的数据块:一种是 PNG 文件必须包含.读写软件也都必须要支持的关键块(critical chunk):另一种叫…
* 音视频入门文章目录 * 预热 上一篇 [PNG文件格式详解]详细介绍了 PNG 文件的格式. PNG 图像格式文件由一个 8 字节的 PNG 文件署名域和 3 个以上的后续数据块(IHDR.IDAT.IEND)组成. PNG 文件包括 8 字节文件署名(89 50 4E 47 0D 0A 1A 0A,十六进制),用来识别 PNG 格式. 数据块中有 4 个关键数据块: 文件头数据块 IHDR(header chunk):包含有图像基本信息,作为第一个数据块出现并只出现一次. 调色板数据块 P…
* 音视频入门文章目录 * JPEG 文件格式解析 JPEG 文件使用的数据存储方式有多种.最常用的格式称为 JPEG 文件交换格式(JPEG File Interchange Format,JFIF).而 JPEG 文件大体上可以分成两个部分:标记码(Tag)和压缩数据. 标记码由两个字节构成,其前一个字节是固定值 0xFF,后一个字节则根据不同意义有不同数值.在每个标记码之前还可以添加数目不限的无意义的 0xFF 填充,也就说连续的多个 0xFF可以被理解为一个 0xFF,并表示一个标记码的…
* 音视频入门文章目录 * RGB-to-PNG 回顾 上一篇 [手动生成一张PNG图片] 根据 [PNG文件格式详解] 一步一步地手动实现了将 RGB 数据生成了一张 PNG 图片. 有许多开源的 PNG 相关的库可以简化开发: svpng libattopng lodepng libpng 使用开源库的方式 svpng Demo 例子: void test_rgb(void) { unsigned char rgb[256 * 256 * 3], *p = rgb; unsigned x,…
* 音视频入门文章目录 * RGB-TO-BMP 回顾 将 RGB 数据转成 BMP 图片: 了解 BMP 文件格式 准备 BMP 文件头信息 准备 BMP 信息头 BMP 存储 RGB 的顺序是 B-G-R BitmapInfoHeader 中的 biHeight 字段,biHeight 为正,位图自底向顶扫描,biHeight 为负,位图自顶向底扫描. BMP 图像四字节对齐 实际开发过程,通常会使用第三方开源库来简化开发,屏蔽一些底层的复杂度,节省大量编写代码的时间. 使用开源库的方式 l…