📜  OpenCV 的 blobFromImage 是如何工作的?

📅  最后修改于: 2022-05-13 01:54:36.550000             🧑  作者: Mango

OpenCV 的 blobFromImage 是如何工作的?

在本文中,我们将尝试了解 OpenCV 库中 dnn 模块中的 blobfromImage函数如何工作以及何时使用它。

blobfromImage()函数

它为输入图像返回一个 4 维数组/blob。您还可以使用它来预处理图像以匹配您的输入要求。您可以使用它的不同参数来转换图像,所以让我们讨论它的所有参数:

示例 1:缩放和匹配目标大小

大多数情况下,您是模型输入,您必须在 0-1 而不是 0-255 之间缩小图像像素值,即您可以在其中使用scalefactor参数 - 并且还可以更改图像的目标大小:

Python3
import cv2
import numpy as np
 
# change the image path to your image
image = cv2.imread('ad.png') 
 
# let's say this is the required size
size = (640, 720) 
 
# let's print the image pixel values
print(image)
print(f'Image Shape : {np.array(image).shape}')
 
blob = cv2.dnn.blobFromImage(image,
                             scalefactor=1/255,
                             size=size,
                             swapRB=True)
 
# let's see our transformed image- blob
print(blob)
print(f'Blob Shape : {np.array(blob).shape}')


输出:

[[[255 255 255] 
  [255 255 255] 
  [255 255 255] 
  ...
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]]
Image Shape : (817, 861, 3)
[[[[1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]
   ...

   ...
   [1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]]]]
Blob Shape : (1, 3, 720, 640)

如您所见,所有开始时为 255 的值都转换为 1,这是因为我们的比例因子是 1/255。而且我们最终的 blob 大小为 720,640,这正是我们想要的。

示例 2:将其与模型一起使用以创建输入图像

您使用什么比例因子或您使用什么目标大小或您标准化的平均值,这一切都取决于所使用的模型。如果您使用框架中的预训练模型,请阅读他们的文档以了解输入图像的所有要求。

例如:如果我正在创建一个性别分类器程序,然后我决定使用 caffe 模型,

这些是使用该模型创建我们的博客所需的所有值或数据,因此:

这是 blob 现在被转换为直接作为输入传递给我们的模型。

如果您使用预训练模型并希望转换图像以适应模型要求,这是基本过程。

接下来是什么?

尝试使用来自 TensorFlow 和 PyTorch 等框架的预训练模型来创建计算机视觉程序。