📜  OpenCV 的 blobFromImage 是如何工作的?(1)

📅  最后修改于: 2023-12-03 15:18:07.381000             🧑  作者: Mango

OpenCV 的 blobFromImage 是如何工作的?

blobFromImage 是 OpenCV 提供的一个将图像处理成神经网络需要的格式的函数。具体而言,它能够:

  • 对图像进行大小调整;
  • 进行归一化,让图像的每个像素值在 [0, 1] 之间;
  • 去除均值,并将图像的每个像素值减去均值;
  • 选取 RGB 像素值的通道并进行交换;
  • 最终将处理后的图像转换成 Blob 格式,以便神经网络使用。

blobFromImage 的一个示例如下:

blob = cv2.dnn.blobFromImage(image, scalefactor=1.0, size=(224, 224), mean=(104.0, 177.0, 123.0))

其中,image 是输入图像,scalefactor 是缩放因子,size 是输出图像大小,mean 是均值向量。

下面我们详细介绍一下 blobFromImage 的各个参数及其作用:

1. scalefactor 参数

scalefactor 是输入图像的缩放因子。它是一个浮点值,默认为 1.0,即不缩放。如果设置为另一个值,那么输入图像的每个像素值都会乘上这个值。例如,如果 scalefactor 是 0.5,那么输入图像的像素值都会减半。因此,该参数可以用于控制输入图像的大小。

2. size 参数

size 是输出图像的大小。它是一个元组,通常为 (width, height)。blobFromImage 会先将输入图像缩放到这个大小,然后将其进行裁剪或填充,使得最终的输出图像的大小确保为 size

3. mean 参数

mean 是均值向量,它用于对图像进行归一化。如果输入图像的像素值在 [0, 255] 之间,则先将其除以 255,然后分别减去 mean 中对应通道(RGB 三个通道)。例如,如果 mean 是 (104.0, 177.0, 123.0),那么输入图像的每个像素值都会减去它。这个过程确保了每个像素值都在 [0, 1] 之间。

4. RGB 通道

blobFromImage 默认使用 RGB 三个通道,且将它们按顺序交换成 BGR,以适应神经网络的输入格式。因此,在使用 blobFromImage 时,需要注意图像的通道顺序。

5. Blob

最后,blobFromImage 将处理后的图像转换成 Blob 格式。Blob 实际上是一种数据结构,它将多个样本的数据排列成固定大小的一维向量,便于喂入神经网络。对于单张图像,Blob 大小为 (batch_size, channels, height, width),其中 batch_size 为 1,channels 为输入图像的通道数,heightwidth 分别为图像的高度和宽度。在 blobFromImage 中,batch_size 默认为 1,channels 只有一个通道(BGR 三个通道已交换成一个通道),大小为 (1, 3, height, width)。

到此为止,我们对 blobFromImage 的介绍就完成了。通过使用 blobFromImage,我们可以方便地将图像转换成神经网络需要的格式,便于进行分类、检测、分割等任务的训练和预测。