图像和视频的主要格式与编码格式。
图像格式
图像的基本数据结构:RGB,RGBA,A为透明通道。图像是二维数据,数据在内存中只能一维存储,二维转一维有不同的对应方式。比较常见的只有两种方式: 按像素“行排列”从上往下或者从下往上。
不过好像只有bmp图片格式以及windows下的GDI,GDI+是从下往上排列,其它比如DirectX,OpenGL,Cocoa(NSImage, UIImage),OpenCV等都是从上往下排列。
不同图形库中每个像素点中RGBA的排序顺序可能不一样。有可能是RGB,RBG等六种情况。如果是RGB24位图,会存在一个32位对齐的问题,也就是内存对齐。先介绍x86是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,X与处理器没有任何关系,它是一个对所有*86系统的简单的通配符定义。cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推。在x86体系下,cpu一次处理32整数倍的数据会更快,图像处理中经常会按行为单位来处理像素。24位图,宽度不是4的倍数时,其行字节数将不是32整数倍。这时可以采取在行尾添加冗余数据的方式,使其行字节数为32的倍数。
jpeg,png文件之于图像,就相当于zip,rar格式之于普通文件(用zip,rar格式对普通文件进行压缩)。用到压缩算法。
BMP格式
bmp格式没有压缩像素格式,存储在文件中时先有文件头、再图像头、后面就都是像素数据了,上下颠倒存储。
用windows自带的mspaint工具保存bmp格式时,可以发现有四种bmp可供选择:
单色: 一个像素只占一位,要么是0,要么是1,所以只能存储黑白信息
16色位图: 一个像素4位,有16种颜色可选
256色位图: 一个像素8位,有256种颜色可选
24位位图: 就是图(1)所示的位图,颜色可有2^24种可选,对于人眼来说完全足够了。
这里为了简单起见,只详细讨论最常见的24位图的bmp格式。
文件头信息:
bfType=2字节:一定为19778,其转化为十六进制为0x4d42,对应的字符串为BM。
bfSize=4字节:文件大小
bfReserved1=2;一般为0
bfReserved2=2;一般为0
bfOffBits=4:从文件开始处到像素数据的偏移,也就是这两个结构体大小之和.
bmp图片结构头 | ||
字段 | 大小(字节) | 描述 |
biSize | 4 | 此结构体的大小 |
biWidth | 4 | 图像的宽 |
biHeight | 4 | 图像的高 |
biPlanes | 2 | 图像的帧数,一般为1 |
biBitCount | 2 | 一像素所占的位数,一般是24 |
biCompression | 4 | 一般为0 |
biSizeImage | 4 | 像素数据所占大小,即上面结构体中文件大小减去偏移(bfSize-bfOffBits) |
biXPelsPerMeter | 4 | 一般为0 |
biXPelsPerMeter | 4 | 一般为0 |
biClrUsed | 4 | 一般为0 |
biClrImportant | 4 | 一般为0 |
- bmp格式也是可以压缩.
- bmp格式也可以有颜色板。颜色板就是一个颜色的索引,上面说过bmp格式一个像素可以只有2个,16个或256个取值。就拿单色位图来说明,默认为0对应RGB(0,0,0) 1,对应RGB(255, 255, 255)
如果颜色板这样定义:
0对应 RGB(255,0, 0)红
1对应 RGB(0, 255, 0)绿
这样黑白图就成了红绿图
JPEG格式
- jpeg是有损压缩格式, 将像素信息用jpeg保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在[0,100]之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了。
- jpeg没有透明信息。
- jpeg比较适合用来存储相机拍出来的照片,这类图像用jpeg压缩后的体积比较小。其使用的具体算法核心是离散余弦变换、Huffman编码、算术编码等技术,有兴趣的同学可以在网上找一大堆资料,本文就不详细介绍了。
PNG格式
- png是一种无损压缩格式, 压缩大概是用行程编码算法。
- png可以有透明效果。
- png比较适合适量图,几何图。 比如本文中出现的这些图都是用png保存,比用joeg保存体积要小。
再强调一下: jpeg比较适合存储色彩“杂乱”的拍摄图片,png比较适合存储几何特征强的图形类图片。
GIF格式
上面提到的bmp,jpeg,png图片都只有一帧,而gif可以保存多帧图像.gif中有个参数可以控制图片变化的快慢。在程序中可以使用这个参数,也可以自己定义一个参数,这就是为什么gif图片,在不同程序中查看时其变化速度不一样。
webp
google开发的一种有损、透明图片格式,相当于jpeg和png的合体,google声称其可以把图片大小减少40%。
视频格式
视频文件格式(简称:文件格式),视频封装格式(简称:视频格式),视频编码方式(简称:视频编码)。
文件格式:windows设置后缀名的目的是让相应的应用程序来打开相应的文件。可以随意更改后缀名,不会更改文件的内部数据格式。
视频封装格式:一种存储视频信息的容器。视频封装格式不同,也不会影响视频数据,主要是一种对视频数据的组合。因此,视频转换需要设置的本质就是:A设置需要的视频编码、B设置需要的音频编码、C选择需要的容器封装。一个完整的视频转换设置都至少包括了上面3个步骤。主要格式如下:
视频编码格式:对原始视频数据进行编码或解码的程序或算法。属于有损压缩。
1.h26x系列。
2.MPEG系列等。
现在我用的是MPEG封装,h264编码,MP4后缀名。
H.264分为Baseline Profile,Main Profile和High Profile,代表编码复杂程度。
H.264编码的GOP(Group of Picture)是由关键帧I,预测帧P、B组成。GOP越长,一个循环中包含的预测帧也就越多,压缩率越高,编解码难度越高,越不容易精确到帧(视频编辑要求精确到每一帧,也就是每一秒可以分离成24/29/30个画面)。使用<H.264编码,Main/High Profile复杂度,MP4/TS封装>是目前最理想的方案。
图像和视频的主要格式与编码格式。相关推荐
- 语音、图像和视频数据的格式
今天,计算机多媒体技术的应用越来越广泛.多媒体技术的核心就是使用计算机综合处理声.文.图.像等多媒体信息.数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输.存储和处理效 ...
- 【视频基础】封装格式和编码格式
参考文章:视频基础知识-封装格式和编码格式 封装格式:avi.flv.MP4.rmvb.mkv之类 编码格式:h.264.h.265.DivX之类 码率:(kbps)=文件大小(KB) * 8 / 时 ...
- 视频容器格式与编码格式简介
视频容器格式.编码格式定义 我们知道Windows平台上可以通过后缀标明文件格式,比如.exe, .txt, .mg4等... 过去几年还不流行在线视频的时候,大家可以用迅雷下载到各种格式的视频.可 ...
- 音视频封装格式、编码格式
音视频封装格式.编码格式 概述 常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid ...
- 音视频文件的容器格式和编码格式
转自:http://blog.chinaunix.net/uid-25885064-id-3338166.html 音视频文件的容器格式和编码格式 视频和音频以视频文件格式的形式放在一个文件中,方便同 ...
- 音视频封装格式、编码格式知识
常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AA ...
- 视频封装格式以及编码格式说明
视频的基础知识. 包括:视频协议和格式.视频流. 视频帧的基础知识. YUV帧格式.常见的帧名词(帧率fps.分辨率.码率).帧名词(1080p和1080i) 视频编解码而衍生的帧名词(GOP.I\B ...
- 【OpenCV 4开发详解】图像与视频的保存
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- Python爬虫新手进阶版:怎样读取非结构化网页、图像、视频、语音数据
导读:常见的数据来源和获取方式,你或许已经了解很多.本文将拓展数据来源方式和格式的获取,主要集中在非结构化的网页.图像.视频和语音. 01 从网页中爬取运营数据 要从网页中爬虫数据,可使用Python ...
- 基于微软开源深度学习算法,用 Python 实现图像和视频修复
作者 | 李秋键 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复.公安刑侦面部修复等种种实际场景中被广泛应用.图像 ...
最新文章
- RocketMQ主机磁盘空间有限,如何无限期延长消息存储?
- Pycharm中配置Pyflink
- Python数据科学|第一章:数据科学家的武器库
- PHP notice/warning 对性能的影响
- 滴滴顺风车再调整服务时间:男女用户一视同仁
- send和sendmsg性能测试
- C# 如何检测UDP是否被占用_如何悄悄检测微信好友是否被删除?
- 关于动态库so的makefile编写
- 高等代数期末考试题库及答案_高等代数二考试题及答案期末答案
- Android实战之淘宝领券(三)
- 用PL/SQL判断一个FTP服务器上的文件是否存在
- adb 判断imei_adb 获取imei
- 520,都来被虐吧。。。
- 电机控制器功率电路MOS管及驱动芯片选型若干问题总结
- AIX7.1 VMO 参数默认设置
- mysql-8.0.23-winx64安装教程
- win10如何设置有线和无线同时上内网和外网?
- 英语语法汇总(3.代词)
- 010 Editor 9.0.2——注册错误(010 Editor has detected that you have entered an invalid license.)
- 果园机器人反思稿_果园机器人读后感