bmp文件头_图像算法原理与实践——图像文件存储

图像数据在计算机储器设备中的存储形式是图像文件,图像必须按照某个公开的、规范约终结定的数据存储顺序和结构进行保存,才能使不同的程序对图像文件顺利进行打开或存盘操作,实现数据共享。图像数据在文件中的存储顺序和结构称为图像文件格式。目前主流的图像文件格式有 .bmp; .jpg;.jpeg;.png;.gif;.webp;.tiff;.psd 等各种不同的文件格式。在这些图像格式中大部分的格式,都是将像素数据经过压缩编码后进行保存的,这里涉及到比较复杂的图像压缩算法等操作,只有BMP格式的文件是支持原始图像数据保存的,本章重点针对BMP文件格式进行详细讲述。

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选 1bit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。在Windows系统平台上和Android手机上,直接使用系统默认的图片浏览器即可打开。

一、BMP文件格式详解

BMP文件总共由四个部分构成:

(1)BMP文件头(bmp file header):提供文件的格式、大小等信息

(2)位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息

(3)调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表,在使用 256位彩色、16位彩色等情况下用到

(4)位图数据(bitmap data):就是图像的像素数据

c33bcf1f3eb1da3b1289c1e1e6a246e6.png
BMP文件总的构成

1、BMP文件头部分

固定占用14个字节,包括文件类型表示、文件大小、像素数据偏移等信息

eb86ce6ce01b9b3a481ab8bbe7041261.png

2、位图信息头

固定占用40个字节,包含了图像的基本新,例如:像素的宽度、高度、色彩格式位数、是否有压缩(绝大部分情况下无压缩)等。

31786b67b556c228727e906696cc88c9.png

3、调色板信息

这一项是可选项,适用于索引方式伪彩色的图像数据。调色板其实是一张映射表,标识颜色索引号与其代表的颜色的对应关系。总共有256个索引,每个索引对应一个RGBA四字节的色彩值,而后续位图数据只需要保存每个像素点的索引,根据索引找到对应的RGBA数据值。根据索引列表大小,该部分信息总计占用 256*4=1024个字节。

effec348e430bdc91283cc853c412fbe.png

伪彩色方式在过去计算机存储空间不足的情况下,采用的一种平衡内存和效果的方式,由于现在硬件成本的大幅度下降,所以现在这种方式在绝大部分甚至嵌入式设备上也很少使用了,因此本章节也不对该部分详细讲述。

4、位图数据

这部分存放的就是详细的每个像素的RGB或者RGBA数据。存放顺序从左到右、从下到上的顺序存放。 这里有两点需要注意一下:

(1)像素RGB值存放时,先存放图像最下面一行数据,然后再存放下面倒数第二行数据,所以存放顺序是倒的,这个跟正常浏览顺序不一样。

(2)每一行像素数据需要保证4字节对齐,不对齐的需要补充空字节,这个是BMP文件格式本身要求的。对于RGBA 32位色彩格式来说没有任何问题,但是对于Gray或者RGB格式的数据 ,有时一行像素需要补充一些空字节。例如:对于宽高为 322*240 像素的RGB数据,正常计算一行像素数据需要 322 * 3= 966字节,但是966不是四字节对齐,所以在存储时,每行的像素数据要保存为 968字节,最后2个字节保留。

二、BMP文件读写操作

针对如上的BMP文件格式,我们使用C语言来实现对于.bmp文件的读写操作,考虑到调色板格式的色彩格式现在几乎不再使用,因此我们代码中也不考虑这种情况。

//

总结

本章主要讲解了对于非压缩的RGB、RGBA像素格式的图像数据保存到.bmp文件的方法。.bmp文件是使用最广泛的文件格式之一,支持的平台众多,也是存储和加载最方便的一种图像格式。在后续教程中,我们可以随时将算法处理过程中的图像数据保存下来查看图像内容,从而方便调试。而其他格式的图片可以通过工具方便的转换为.bmp图片,在Windows平台上最简单的一种方式是:使用Windows系统自带的画图程序,打开任意格式的图像文件,然后选择另存为 .bmp即可。

文章系列目录

华叔-视觉魔术师:图像算法原理与实践——绪论​zhuanlan.zhihu.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一共81个,开源大数据处理工具汇总

查询引擎 一、Phoenix 贡献者::Salesforce 简介:这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动。 Phoen…

html5怎么删除样式,css怎么删除一个样式

css删除一个样式的方法:首先创建一个HTML示例文件;然后给div添加css样式;最后通过“removeClass()”方法从被选元素删除一个或多个类即可。本教程操作环境:windows7系统、HTML5&&CSS3版、Dell G3电脑。CSS添加样式、删除样…

python语言中内置的字符串排版方法_Python14之字符串(各种奇葩的内置方法)

一、字符串的分片操作其分片操作和列表和元组一样1 str1 keshengtao2 str1[2:6]3 shen4 str1[:]5 keshengtao6 str1[:4]7 keshView Code二、访问字符串中的字符注:字符串中的单个字符,同样也是字符串1 str1 keshengtao2 str1[3]3 hView Code三、字符串…

sqlserver 字符串转化数值函数_Excel常见函数用法(TEXT函数)

基本语句:=TEXT(数值,文本格式) 用法说明:TEXT函数可通过格式代码对数字应用格式,进而更改数字的显示方式。其中,参数①是我们想要改变格式的数值,它可以是文本,也可以是数字;而参数②就是我们想要参数①最终变成的格式,它的作用原理和自定义数字格式一致,基本用法共…

laravel 的 表单请求

在对文章、帖子等信息进行创建、更新的时候,需要进行表单验证的时候,一般我们使用Request来获取输入的值来进行验证,这样需要在每一个方法中进行书写验证规则。 laravel 提供了创建表单请求,我们可以使用 artisan 来创建一个表单请…

Flume概述

官网 http://flume.apache.org/ 介绍 Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中。一般的采集需…

日常计算机操作知识试题,关于2017计算机一级考试试题操作题

关于2017计算机一级考试试题操作题在日常学习和工作中,我们很多时候都不得不用到试题,试题可以帮助参考者清楚地认识自己的知识掌握程度。那么一般好的试题都具备什么特点呢?下面是小编为大家整理的关于2017计算机一级考试试题操作题&#xf…

概率分布分位点_概率分布的分位数三.PPT

概率分布的分位数三5.2 常用统计分布 一、常见分布 t 分布具有下列性质: 性质5.6 设 , 则当 时有 性质5.7 设 , 是T的分布密度, 则 此性质说明,当 时,T分布的极限 分布是标准正态分布。 这说明F分布极限分布也是正态分…

mastercam加工报表生成_听说最厉害的工程师才敢这样玩五轴加工?

今天让我们一起来看看五轴有些什么接地气的玩法:侧刃加工(此图非动图)相较使用刀具底刃加工,利用刀具侧刃加工可以得到更加光滑的加工表面。适用于航空航天工业中复杂型腔工件的精加工。Mastercam提供专用功能可有效防止刀具和零件型腔底部出现过切&…

Flume安装(单节点)

Flume单节点的安装非常简单。 1、下载 2、解压 3、配置环境变量FLUME_HOME 4、flume-env.sh配置JAVA_HOME 具体步骤 下载 http://flume.apache.org/download.html 解压 tar -zxvf apache-flume-1.7.0-bin.tar.gz 配置FLUME_HOME root 用户或者 su root vi /etc/pro…

电子科技大学2019年计算机复试分数线,2019考研电子科技大学复试分数线已公布...

2019考研电子科技大学复试分数线已公布!相信接下来很多2019考研考生都会关注34所考研复试分数线及考研国家线相关信息。中公考研小编整理了“2019考研电子科技大学复试分数线已公布”文章,希望能对2019考研考生有帮助~根据教育部有关文件精神&#xff0c…

量子计算时代来临?D-Wave 量子计算机使运算速度提高 1 亿倍!

查尔斯巴贝奇(Charles Babbage)于 19 世纪 30 年代提出了一款难以实现的概念性分析引擎,自那时以来,计算机科学一直为了保持领先于时代的地位而奋力前行。在过去 75 年内,许多惊人的创举接连出现:可编程电子…

python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了

安装pygame本人电脑是windows 10、python3.6,pygame下载地址:pypi.python.org/pypi/Pygame…请自行下载对应python版本的pygame运行以下命令创建Pygame窗口及响应用户输入新建一个文件夹alien_invasion,并在文件夹中新建alien_invasion.py文件…

Map Reduce和流处理

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~本文由从流域到海域翻译,发表于腾讯云社区map()和reduce()是在集群式设备上用来做大规模数据处理的方法,用户定义一个特定的映射,函数将使用该映射对一系列键值对进行处理…

Flume实战监听网络端口

具体的配置解释见官网 http://flume.apache.org/FlumeUserGuide.html#flume-sources 1、flume安装目录下新建文件夹 example 2、在example下新建文件 netcat-logger.conf内容如下:#name the components on this agent a1.sources r1 a1.sinks k1 a1.channels…

滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...

一.算法题题目Given a string, find the length of the longest substring without repeating characters.ExampleGiven "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with the length…

jpa findone怎么用_Jpa VS MyBatis,你用哪个?

经常看到有小伙伴在讨论 JPA 和 MyBatis 这两个孰优孰劣的问题,其实松哥觉得这是一个伪命题,没必要为这种问题争个面红耳赤,每种框架有它存在的道理,也有各自擅长的事情,今天松哥就和大家来聊聊这两个框架,…

国家开放大学本科计算机应用基础,【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】.docx...

【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案 盗传必究 形考作业一 一、单选题 1当前的计算机一般被认为是第四代计算机,它所采用…

Reset Password 重置密码 (CentOS 5,6,7 ; Juniper Networks: SRX100 )

一些重置root 密码的文档分享(来自官网): CentOS 5,6,7 Juniper Networks : SRX100 链接:https://share.weiyun.com/5BM4kwK 密码:f3t5xu转载于:https://www.cnblogs.com/ling3blog/p/905018…

python正则表达式中的转义字符_python 正则表达式之转义字符

最近在整理python相关的知识,使用python对网站进行爬取数据的时候,需要使用到转义字符,之前对转义字符理解一直比较模糊,并且在python中还有一个叫原生字符r。所以通过网上调查资料对该内容进行整理,已备不时之需。 字…