图像格式

图像的基本数据结构: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格式

  1. jpeg是有损压缩格式, 将像素信息用jpeg保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在[0,100]之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了。
  2. jpeg没有透明信息。
  3. jpeg比较适合用来存储相机拍出来的照片,这类图像用jpeg压缩后的体积比较小。其使用的具体算法核心是离散余弦变换、Huffman编码、算术编码等技术,有兴趣的同学可以在网上找一大堆资料,本文就不详细介绍了。

PNG格式

  1. png是一种无损压缩格式, 压缩大概是用行程编码算法。
  2. png可以有透明效果。
  3. 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封装>是目前最理想的方案。

图像和视频的主要格式与编码格式。相关推荐

  1. 语音、图像和视频数据的格式

     今天,计算机多媒体技术的应用越来越广泛.多媒体技术的核心就是使用计算机综合处理声.文.图.像等多媒体信息.数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输.存储和处理效 ...

  2. 【视频基础】封装格式和编码格式

    参考文章:视频基础知识-封装格式和编码格式 封装格式:avi.flv.MP4.rmvb.mkv之类 编码格式:h.264.h.265.DivX之类 码率:(kbps)=文件大小(KB) * 8 / 时 ...

  3. 视频容器格式与编码格式简介

    视频容器格式.编码格式定义 我们知道Windows平台上可以通过后缀标明文件格式,比如.exe,  .txt, .mg4等... 过去几年还不流行在线视频的时候,大家可以用迅雷下载到各种格式的视频.可 ...

  4. 音视频封装格式、编码格式

    音视频封装格式.编码格式 概述 常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid ...

  5. 音视频文件的容器格式和编码格式

    转自:http://blog.chinaunix.net/uid-25885064-id-3338166.html 音视频文件的容器格式和编码格式 视频和音频以视频文件格式的形式放在一个文件中,方便同 ...

  6. 音视频封装格式、编码格式知识

    常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AA ...

  7. 视频封装格式以及编码格式说明

    视频的基础知识. 包括:视频协议和格式.视频流. 视频帧的基础知识. YUV帧格式.常见的帧名词(帧率fps.分辨率.码率).帧名词(1080p和1080i) 视频编解码而衍生的帧名词(GOP.I\B ...

  8. 【OpenCV 4开发详解】图像与视频的保存

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. Python爬虫新手进阶版:怎样读取非结构化网页、图像、视频、语音数据

    导读:常见的数据来源和获取方式,你或许已经了解很多.本文将拓展数据来源方式和格式的获取,主要集中在非结构化的网页.图像.视频和语音. 01 从网页中爬取运营数据 要从网页中爬虫数据,可使用Python ...

  10. 基于微软开源深度学习算法,用 Python 实现图像和视频修复

    ‍‍ 作者 | 李秋键 编辑 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复.公安刑侦面部修复等种种实际场景中被广泛应用.图像 ...

最新文章

  1. RocketMQ主机磁盘空间有限,如何无限期延长消息存储?
  2. Pycharm中配置Pyflink
  3. Python数据科学|第一章:数据科学家的武器库
  4. PHP notice/warning 对性能的影响
  5. 滴滴顺风车再调整服务时间:男女用户一视同仁
  6. send和sendmsg性能测试
  7. C# 如何检测UDP是否被占用_如何悄悄检测微信好友是否被删除?
  8. 关于动态库so的makefile编写
  9. 高等代数期末考试题库及答案_高等代数二考试题及答案期末答案
  10. Android实战之淘宝领券(三)
  11. 用PL/SQL判断一个FTP服务器上的文件是否存在
  12. adb 判断imei_adb 获取imei
  13. 520,都来被虐吧。。。
  14. 电机控制器功率电路MOS管及驱动芯片选型若干问题总结
  15. AIX7.1 VMO 参数默认设置
  16. mysql-8.0.23-winx64安装教程
  17. win10如何设置有线和无线同时上内网和外网?
  18. 英语语法汇总(3.代词)
  19. 010 Editor 9.0.2——注册错误(010 Editor has detected that you have entered an invalid license.)
  20. 果园机器人反思稿_果园机器人读后感

热门文章

  1. 【附白皮书下载】专家黄正杰:从微笑曲线出发,思考制造业数字化转型方向
  2. XP下免U盘安装Ubuntu 18.04(持续更新遇到的问题,20200422更新)
  3. 开源驱动全球经济发展
  4. 发送速率(传输速率)和传播速率
  5. python lambda拉姆达表达式
  6. 使用Foxmail添加outlook和gmail
  7. ubuntu下安装wine1.8+QQ音乐
  8. 机器学习 -- 主成分分析
  9. Linux Capability探索试验
  10. Mac 外接显示器色彩不正常解决方案