OpenCV 的 blobFromImage 函数是如何工作的?


OpenCV 的 blobFromImage 是计算机视觉中一个至关重要的函数,它允许从图像中检测和提取斑点(blob)。了解此函数的工作原理对于各种图像处理任务至关重要。

在本文中,我们将深入探讨 OpenCV 的 blobFromImage 的内部工作原理,探索其参数及其对斑点提取的影响,并深入了解此强大的计算机视觉应用中斑点检测工具。

什么是 OpenCV 的 blobFromImage?

OpenCV 的 blobFromImage 是一个允许从图像中检测和提取斑点的函数。斑点是图像中共享共同属性(例如亮度或颜色)的区域。斑点检测是许多计算机视觉应用中的关键步骤,包括目标跟踪、运动分析和特征提取。

blobFromImage 的语法如下:

cv2.dnn.blobFromImage(image, scalefactor=None, size=None, mean=None, swapRB=None, crop=None, ddepth=None)
  • image - 要从中提取斑点的输入图像。

  • scalefactor - 在斑点提取之前应用于图像数据的乘数。

  • size - 输出斑点的所需空间大小。

  • mean - 用于从输入图像数据中减去的平均值。

  • swapRB - 一个布尔值,指示是否交换输入图像的红色和蓝色通道。

  • crop - 一个布尔值,指示是否在斑点提取之前对输入图像进行中心裁剪。

  • ddepth - 输出斑点的深度。

image 参数是函数中唯一必填的参数,其余参数都是可选的。scalefactor 参数可用于在斑点提取之前缩放图像数据,而 size 用于指定输出斑点的空间大小。mean 是一组用于输入数据归一化的值,swapRB 用于更改颜色通道的顺序。crop 参数指定是否在斑点提取之前对输入图像进行中心裁剪,ddepth 是输出斑点的深度。

OpenCV 的 blobFromImage 函数是如何工作的?

OpenCV 的 blobFromImage 是一个用于从输入图像中检测和提取斑点的函数。此函数将图像作为输入,并输出一个斑点,该斑点是图像中共享共同属性(例如亮度或颜色)的区域。

按照以下步骤探索 blobFromImage 的工作原理:

  • 导入所需的库并加载图像,如下所示:

import cv2
import numpy as np
# Load the input image
img = cv2.imread('example_image.jpg')
  • 为 blobFromImage 定义参数。这些参数用于微调斑点提取过程。在本例中,我们将比例因子设置为 1.0,这意味着图像数据不会缩放。我们还将输出斑点的空间大小设置为 224 x 224。此外,我们将使用均值减法来归一化输入图像数据,并将交换输入图像的红色和蓝色通道。

# Define the parameters for blobFromImage
params = {
   'scalefactor': 1.0,
   'size': (224, 224),
   'mean': (104.0, 177.0, 123.0),
   'swapRB': True
}
  • 使用 blobFromImage 函数从输入图像中提取斑点。我们将图像和定义的参数作为参数传递给函数。该函数返回一个斑点,它是一个 4 维数组,包含图像的提取区域。

# Extract the blob from the input image using blobFromImage
blob = cv2.dnn.blobFromImage(img, **params)
  • 使用 OpenCV 的 imshow 函数显示原始图像和提取的斑点,并将斑点重塑为 3 维数组以匹配 cv2.imshow() 预期的通道数。然后,我们使用 cv2.cvtColor() 将斑点图像从 BGR 颜色空间转换为 RGB 颜色空间。最后,我们使用 cv2.imshow() 显示提取的斑点。

# Display the original image
cv2.imshow('Original Image', img)

# Reshape the blob to a 3-dimensional array
blob_reshaped = blob.reshape(blob.shape[2], blob.shape[3], blob.shape[1])
# Convert the blob to a valid image format
blob_image = cv2.cvtColor(blob_reshaped, cv2.COLOR_BGR2RGB)

# Display the extracted blob
cv2.imshow('Extracted Blob', blob_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 以下是完整的代码及其输出:

示例

import cv2
import numpy as np

# Load the input image
img = cv2.imread('sample2.jpg')
# Define the parameters for blobFromImage
params = {
   'scalefactor': 1.0,
   'size': (224, 224),
   'mean': (104.0, 177.0, 123.0),
   'swapRB': True
}
# Extract the blob from the input image using blobFromImage
blob = cv2.dnn.blobFromImage(img, **params)

# Display the original image
cv2.imshow('Original Image', img)

# Reshape the blob to a 3-dimensional array
blob_reshaped = blob.reshape(blob.shape[2], blob.shape[3], blob.shape[1])

# Convert the blob to a valid image format
blob_image = cv2.cvtColor(blob_reshaped, cv2.COLOR_BGR2RGB)

# Display the extracted blob
cv2.imshow('Extracted Blob', blob_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

在上面的示例中,我们演示了如何使用 OpenCV 的 blobFromImage 函数进行斑点检测和提取。可以微调函数的参数以调整斑点提取过程,以适应各种图像处理任务。

注意 - 上述示例假设输入图像为 BGR 格式。如果图像采用其他格式,则可能需要相应地调整用于归一化的均值。

结论

总之,OpenCV 中的 blobFromImage() 函数是准备用于深度学习模型的图像的宝贵工具。它能够提取图像特征并将它们转换为与神经网络兼容的格式。通过理解 blobFromImage() 的功能和语法,我们可以改进我们的深度学习工作流程并获得更好的结果。

更新于: 2023-07-24

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.