bmp文件格式分析

  下面来分析bmp文件的格式。

  我这里用的是8位256色的灰度图像。其他位深的图像在最后在做介绍。

  首先也是点开属性得到下面信息:

  图像是20像素宽40像素高的8位灰度图像,大小为1878字节。其中像素占20*40=800byte,文件结构头占1078字节,其实灰度图像的头结构都是占1078字节的。这1078个字节其实又分为两个部分最开头的54个字节是真正的头信息,余下的1024个字节是调色板信息。

 

  先来分析这头54个字节,以ultraedit打开图像得到:

  下面的‘这里的值’都是低位在前的。比如 56 07 00 00,实际的应该是00000756H,也就是1878Byte。

起始地址

大小

这里的值

代表的意思

00H

2

42 4D

BM,代表这种文件吧

02H

4

56 07 00 00

十进制是1878,文件的大小。

06H

2

00 00

特定应用程序使用,这里不用。

08H

2

00 00

特定应用程序使用,这里不用。

0AH

4

36 04 00 00

十进制1078,实际数据开始的偏移地址。

0EH

4

28 00 00 00

十进制40,从这里开始的图像头信息所占的字节数。

12H

4

14 00 00 00

十进制20,图像的宽度。

16H

4

28 00 00 00

十进制40,图像的高度。

1AH

2

01 00

使用的彩色平面数。都为1。

1CH

2

08 00

十进制8,图像的位深。

1EH

4

00 00 00 00

规定像素位的掩码,为8位和32维深的图像时就是一般的RGB,如果是16位图像会有556或565这样的掩码表示。

22H

4

20 03 00 00

十进制800,这里是实际像素所占的空间。

26H

4

00 00 00 00

位图水平分辨率,每米像素数。

2AH

4

00 00 00 00

位图垂直分辨率,每米像素数。

2EH

4

00 01 00 00

位图中实际使用的颜色表中的颜色数。

32H

4

00 00 00 00

位图中重要的颜色数。

  这之后的256*4个字节是调色板的信息,处理图像数据的时候就不用关心这个了,不过不同的调色板信息会对相同的像素产生不同的显示效果。Matlab读取数据时不关心调色板,Opencv读数据会根据调色板信息把实际的像素做变换,所以如果调色板不是00 00 00 00一直到ff ff ff 00这样下来,opencv和matlab读取的像素会有不一致的结果。今天就是有同学来问我这个问题,我才注意到的。调色板只有256色图像之前才有,之后就没有调色板了。也就是说16、24、32位深的图像从上面这个头结构接下来就是图像像素信息了。

  现在来说图像的像素信息。bmp中像素的存储和一般的显示效果还是相当迥异的。

  下表是24位深像素的存储格式(千万注意,这不是显示格式):

B

G

R

 

 

。。。。。

 

 

B

G

R

 

 

很长一段的像素数据。。。。。。。。

 

B

G

R

 

 

。。。。。

 

 

B

G

R

显示的最后一行的最左边的数

显示的最后一行的最右边的数

显示的第一行的最左边的数

显示的第一行的最右边的数

  最后再说一下黑白图像,黑白图像是位深为1的图像,千万别把256色但只有0和255像素的图像当黑白图像了,我很长一段时间都搞错了。位深为1的图像一个字节能表示8个像素,不过要是像素的行是要4字节对齐的,比如我这里一行20像素,用2字节再加3bit也就是3Byte就可以了,不过还是要扩展到4byte。

  由于不可能把各种深度格式都在这里说清楚,所以遇到特殊的情况还需特殊处理。这里就说这些主要的东西吧。

  有机会也许会把相关程序附上,也许就是下一篇。

注:相关程序在这里:http://www.cnblogs.com/tiandsp/archive/2012/11/30/2795788.html

转载于:https://www.cnblogs.com/tiandsp/archive/2012/10/22/2734552.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BMP格式是Windows操作系统中最常见的图像文件格式之一,它采用无压缩的位图图像存储方法,可以保存不同颜色、分辨率和位深度的图像。而RGB文件则是指将图像的颜色信息按照红、绿和蓝三种颜色通道进行分离保存的文件。 要将BMP格式转换为RGB文件,首先需要了解BMP文件的结构。BMP文件文件和图像数据组成,文件包含了文件的基本信息,而图像数据则包含了每个像素点的颜色信息。 要进行转换,可以使用编程语言或图像处理软件来实现。以编程语言为例,可以按照以下步骤进行转换: 1. 读取BMP文件文件信息,识别出图像的宽度、高度和位深度等参数。 2. 根据位深度信息,确定每个像素点的大小。 3. 读取图像数据,按照每个像素点的大小进行解析,获取每个像素点的颜色信息。 4. 将每个像素点的颜色信息拆分为红、绿、蓝三个通道的颜色值。 5. 将红、绿、蓝三个通道的颜色值保存为RGB文件。 通过以上步骤,就能够将BMP格式的图像转换为RGB文件,其中RGB文件中的数据就是按照每个像素点的颜色信息进行分离的,可以方便地进行进一步的图像处理和分析。 需要注意的是,对于一些特殊的BMP文件,可能存在压缩或者加密的情况,这种情况下需要根据具体的情况来进行相应的处理。另外,为了保证转换的准确性和稳定性,建议使用专业的图像处理软件或者图像处理库进行转换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值