[置顶] 对bmp文件的总结

 对bmp文件的总结

最近做一个与OCR相关的课题,很明显离不开对bmp文件的探讨。虽然开始对前人bmp文件的总结有个了解和探究。但发现:任何东西自己如果不动手亲自做一遍,都是虚无缥缈的。这也是我为什么要从理论研究转换到工程应用上的原因。理论研究(专指在中国体制下的研究)总是给人(自己)似懂非懂的感觉,就比如说这次的工程课题,刚开始接到这个课题时,觉得太简单了。但自己在VC编程时,却考虑的问题非常多。现总结如下:

1)  windows画图板中保存bmp文件时,有单色、16色、256色、真彩色四种位图格式,不知有没有人对这个有没有研究过。首先:

a)       单色、16色、256色的位图,都是索引图像,即位图文件里存在了颜色表。位图数据部分(有的人通常称之为像素值)实际是等于颜色表中的某个索引,通过这个索引,找到颜色表中的RGB三色值,然后通过显像管(当然液晶的原理就不一样了,我也不知道)显示出来。

b)      单色、16色、256色,仅仅是当前的位图的颜色种类有这么多种,所以有可能还有彩色在里面。是不是有些人认为256色的就是灰度图啊!!!不是这样的哦!!!!你可以尝试把一幅彩色图片保存成256色,然后对这个图片进行放大,就可以看到有彩色点在里面。从这里可以推理出:灰度图的颜色只有256种,但只有256色的图片不一定是灰度图。要使一幅图片是灰度图(所谓灰度图,即没有色调之分)就要求该像素的RGB值相等。

c)       做理论研究的人都喜欢使用MATLAB软件,当imshow(单色、16色、256色的bmp图)时,所得到的像素矩阵不是实际的像素值,而是该像素值(所有的像素值都有RGB三个分量,除非是以前的黑白电视机)在颜色表中的索引值(即数组的下标)。所有如果你做这样的操作:

I=imread(256色的位图)//提示该位图带有彩色在里面

imshow(I)

此时显示的是灰度图!!!!!!而不是彩色。

2)  单色图与只有两种颜色(黑白)灰度图的区别与联系:

a)       首先从颜色上看:单色图的颜色表只有两条,即占用2×(RGB+保留一个字节)=8个字节;而灰度图,无论该灰度图只有黑白色,还是整个灰度级都有,它的颜色表长度都是2^8=256条,即256×4=1024个字节

b)      从文件位图数据区域开始,有很大区别:单色图对于每个像素只有1位进行编码;而灰度图每个像素用一个自己编码,所以很明显单色图和只有黑白色的灰度图从视觉上看,都一样,没有什么区别,也没有颜色变换,但是存储量上有很大区别。下面是一个40×20的图片

          

如果以灰度图存储:则该文件的内存信息如下:

 [置顶] 对bmp文件的总结_第1张图片

  [置顶] 对bmp文件的总结_第2张图片

 [置顶] 对bmp文件的总结_第3张图片

 

                 而二值化的图片的二进制信息如下:

[置顶] 对bmp文件的总结_第4张图片

拿图像的第一行为例,第一行是全白的;如果是灰度图,则是20个ff,如上上图所示。如果是二值图像则是:FF FF F0 00呢?我们把他写成二进制形式:

1111 1111 1111 1111 1111 0000 0000 0000

黄色背景,红色1 表示 第一行的 像素索引值。为什么后面有很多0呢??因为bmp位图规定,图像的每一行必须存储成4个字节的倍数,所以补了那么多0,让他形成4个字节。

 

 

你可能感兴趣的:(编程,c,windows,matlab,存储)