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() 的功能和語法,我們可以改進我們的深度學習工作流程並獲得更好的結果。