计算机视觉——手把手教你算 BMP图像存储

图像大小

文件头+图像(+调色板)

色位图像

包括:单色位图、16色位图、256色位图

文件头大小(字节):40+14=54
图像:色图像存储采用调色板方式存储,将一张图片试做一个二维矩阵,那么每一个点的值,存的是调色板表的索引值,每一个值对应调色板里的一种颜色,以此来表示图像中点的颜色。
调色板:一般多少色的图像,调色板就有多少种颜色,每种颜色存储需要4个字节,那么调色板的大小就是 颜色数 x 4 个字节。那么存储这么多种的颜色,就需要对应个数的二进制位。如:16色图像,我们要想在矩阵中表示出他的颜色,就需要24,也就是4位来存储,记录所有的这16种颜色的索引;又如256色图像,我们就需要28,也就是8位来表示出所有的256种颜色对应的索引值。
调色板
调色板的思路是:先用一定的空间,把颜色存储起来,每种对应一个数字;那么我们在图像矩阵的每一个位置,就不用存储这个像素点的颜色信息了,只要存代表这种颜色的序号就可以了。那么在一定情况下,就可以达到节省空间的效果。

首先我们做一道题先来感受一下:

假定windows下的一 幅 256色 bmp图像的分辨率大小为512*512,试计算图像的存储大小(包含文件头、文件信息头和调色板) ,并给出详细的计算过程。

在这里,头文件占54个字节,调色板大小占256 x 4个字节

那么,对于这道题,根据理论逻辑就应该是:

像素大小 = 头文件 + 调色板 + 图像矩阵

(40+14) + 256 x 4+ (8 x 512 x 512) / 8 = 263222 字节

注意:单位是字节。计算存储大小一定要时刻注意单位到底是bits还是字节!

实际演示图如下:
在这里插入图片描述

还是可以理解的吧?然后接下来,我们在此基础上引入一个概念补齐原则(又称:对齐原则)。对于数据的存储,我们在计算机组成原理中曾经讲到,如果信息以字节为单位存储,我们知道读写速度是很快的。在Windows下,我们像素的最小存储单位是一个字节,而如果的最后位数不足一个字节(8位),则需要补齐一个字节,这个过程我们称做补齐原则

补齐原则

Windows默认的扫描的最小单位是4字节,如果数据的对齐满足这个值,对于数据的获取速度等会有很大的增益。
因此,BMP图像顺应了这个要求,要求每行的数据的长度必须是4的倍数,如果不够,需要进行比特填充(以0填充),以达到按行的快速存取。这时,位图数据区的大小就需要重新计算。

注意:补齐原则只关注行元素,对于列则无需补齐。

那么,有了以上的信息,我们就做一道题计算一下。

假定windows下的一 幅 256色 bmp图像的分辨率大小为135*135,试计算图像的存储大小(包含文件头、文件信息头和调色板) ,并给出详细的计算过程。

在这里,头文件占54个字节,调色板大小占256 x 4个字节

公式为:

头文件 + 调色板 + [ (行像素 x 位数 + 31 ) / 32 ] x 4 x 列像素

那么,对于这道题,最终结果就应该是:
(40+14)+256 x 4+[ (135 x 8+31) /32 ]x 4 x 135=19438

好,那我们512x512的那一道题是不是算错了呢?我们发现,因为其满足倍数要求,自然无需补齐,所以也就是正确的。

回过头来,我们将 135x135 与 135x136 进行比较也可以发现,行135 与 行136 最终图像大小相同,说明 列 不实行补齐原则。
在这里插入图片描述

那么我们把上题做一些改动,将256色改为16色,计算如下:
(40+14)+16 x 4+[(135 x 4+31 ) / 32] x 4 x 135=9298
在这里插入图片描述

那么对于公式,我们就可以这么理解(个人分析,可不看):

行像素 x 位数 可以算出一行像素的总位数
+31是为了实现向上取整对向下取整的转化 /32再向下取整,可理解为求行像素的字的个数(32位系统,1字=4字节)
再*4就是行像素的字节数
然后 x 列像素 就是整个图像存储所需的字节数
最后加上 文件头 + 调色板,即为所求。

彩色位图

包括:16位高彩色位图(16位位图)、24位真彩色位图(24位位图)、32位增强真彩色位图(32位位图)。

文件头大小(字节):40+14=54
图像:这几种位图,意为:图像中的某个像素,可以用。。位来表示其颜色种类数。
如:24位图,就是每一个像素点,都有24位来表示它的颜色。那么也就是说一个像素可以有224种颜色。

16位图像使用2字节保存颜色值,常见有两种格式:5位红5位绿5位蓝和5位红6位绿5位蓝, 即555格式(最后一位保留设为0)和565格式。
24位图像使用3字节保存颜色值,每一个字节代表一种颜色,按红、绿、蓝排列。
32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除了原来的红、绿、蓝,还有 Alpha通道,即透明色。

其实这种程度的图像颜色就已经十分丰富,已经不是人眼可以分辨的了。所以,我们称为:高彩色、真彩色。那么颜色丰富,代价自然也就是存储空间的需求加大。除此之外,这种图像的存储是不需要调色板的,所以我们就可以得到图像的大小计算公式为:

头文件 + [ (行像素 x 位数 + 31) / 32] x 4 x 列像素

那么接下来看一道例题,我们用135 x 135来举例:

假定windows下的一 幅 24位位的 bmp图像的分辨率大小为135*135,试计算图像的存储大小(包含文件头、文件信息头和调色板) ,并给出详细的计算过程

就应该是:54 + [ (135 x 24 + 31 ) / 32 ] x 4 x 135 = 55134
在这里插入图片描述

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
YOLOv5是目标检测法中的一种,通过训练自己的数据集可以实现对自定义目标的检测。下面是YOLOv5入门实践的步骤。 第一步,准备数据集。首先收集一些与你想要检测的目标相关的图像,确保图像中的目标已标注好边界框坐标。将图像和对应的标注文件放在数据集文件夹中。 第二步,配置运行环境。需要在计机上安装Python环境,并根据YOLOv5的要求安装相应的库和依赖。可以通过pip或conda进行安装。 第三步,调整配置文件。YOLOv5提供了一个默认的配置文件,可以根据自己的需求进行修改。主要需要调整的是类别数量和路径配置。 第四步,划分训练集和验证集。将数据集中的图像和标注文件划分为训练集和验证集,一般可以按照70%的比例划分。 第五步,训练模型。在终端中运行训练命令,指定相关参数,如模型类型、数据集路径、训练集和验证集路径等。训练时可以选择使用预训练权重或从头开始。 第六步,评估模型。训练完成后,可以通过评估命令对模型进行评估,得到关于模型性能的指标,如精确度、召回率等。 第七步,使用模型进行目标检测。训练完成的模型可以用于检测自定义数据集中的目标。可以在终端中运行检测命令,指定相关参数,如模型路径、检测图像路径等。 通过以上步骤,我们可以进行YOLOv5的入门实践,训练自己的数据集,并使用训练好的模型进行目标检测。随着更多的实践和调优,可以提高模型性能和检测效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值