¿Cómo funciona blobFromImage de OpenCV?
blobFromImage de OpenCV es una función vital en visión por computadora que permite la detección y extracción de manchas de una imagen. Comprender cómo funciona esta función es crucial para diversas tareas de procesamiento de imágenes.
En este artículo, profundizamos en el funcionamiento interno de blobFromImage de OpenCV, exploramos sus parámetros y su impacto en la extracción de blobs y obtenemos información completa sobre esta poderosa herramienta para la detección de blobs en aplicaciones de visión por computadora.
¿Qué es blobFromImage de OpenCV?
BlobFromImage de OpenCV es una función que permite la detección y extracción de blobs de una imagen. Las manchas son regiones de una imagen que comparten propiedades comunes, como el brillo o el color. La detección de manchas es un paso fundamental en muchas aplicaciones de visión por computadora, incluido el seguimiento de objetos, el análisis de movimiento y la extracción de características.
La sintaxis de blobFromImage es la siguiente:
cv2.dnn.blobFromImage(image, scalefactor=None, size=None, mean=None, swapRB=None, crop=None, ddepth=None)
image: la imagen de entrada de la que extraer los blobs.
-
scalefactor: un multiplicador aplicado a los datos de la imagen antes de la extracción del blob.
size : el tamaño espacial deseado de los blobs de salida.
media: los valores medios utilizados para restar de los datos de la imagen de entrada.
swapRB: un valor booleano que indica si se intercambian los canales rojo y azul de la imagen de entrada.
crop: un valor booleano que indica si se debe recortar en el centro la imagen de entrada antes de la extracción del blob.
d Depth: la profundidad de los blobs de salida.
El parámetro de imagen es el único argumento obligatorio para la función, mientras que el resto son opcionales. El parámetro scalefactor es útil para escalar los datos de la imagen antes de la extracción de blobs, mientras que el tamaño se usa para especificar el tamaño espacial de los blobs de salida. La media es un conjunto de valores utilizados para la normalización de los datos de entrada y swapRB es útil para cambiar el orden de los canales de color. El parámetro de recorte especifica si se debe recortar al centro la imagen de entrada antes de la extracción de blobs, y dprofundidad es la profundidad de los blobs de salida.
¿Cómo funciona blobFromImage de OpenCV?
BlobFromImage de OpenCV es una función utilizada para la detección y extracción de blobs de una imagen de entrada. Esta función toma una imagen como entrada y genera una mancha, que es una región de la imagen que comparte propiedades comunes como el brillo o el color.
Siga los pasos que se indican a continuación para explorar cómo funciona blobFromImage:
Importe las bibliotecas necesarias y cargue una imagen como se muestra a continuación:
import cv2
import numpy as np
# Load the input image
img = cv2.imread('example_image.jpg')
-
Defina los parámetros para blobFromImage. Estos parámetros se utilizan para ajustar el proceso de extracción de blobs. En este ejemplo, estableceremos el factor de escala en 1,0, lo que significa que los datos de la imagen no se escalarán. También estableceremos el tamaño espacial del blob de salida en 224 x 224. Además, usaremos la resta media para normalizar los datos de la imagen de entrada e intercambiaremos los canales rojo y azul de la imagen de entrada.
# Define the parameters for blobFromImage
params = {
'scalefactor': 1.0,
'size': (224, 224),
'mean': (104.0, 177.0, 123.0),
'swapRB': True
}
Utilice la función blobFromImage para extraer el blob de la imagen de entrada. Pasamos la imagen y los parámetros definidos a la función como argumentos. La función devuelve un blob, que es una matriz de 4 dimensiones que contiene la región extraída de la imagen.
# Extract the blob from the input image using blobFromImage
blob = cv2.dnn.blobFromImage(img, **params)
Muestre la imagen original y el blob extraído usando la función imshow de OpenCV y cambie la forma del blob a una matriz tridimensional para que coincida con la cantidad de canales esperados por cv2.imshow(). Luego, convertimos la imagen del blob del espacio de color BGR al espacio de color RGB usando cv2.cvtColor(). Finalmente, mostramos el blob extraído usando 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()
A continuación se muestra el código completo con el resultado:
Ejemplo
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()
Producción
En el ejemplo anterior, hemos demostrado cómo utilizar la función blobFromImage de OpenCV para la detección y extracción de blobs. Los parámetros de la función se pueden ajustar para ajustar el proceso de extracción de blobs para que se adapte a diversas tareas de procesamiento de imágenes.
Nota − El ejemplo anterior supone que la imagen de entrada está en formato BGR. Si la imagen tiene un formato diferente, es posible que sea necesario ajustar los valores medios utilizados para la normalización en consecuencia.
Conclusión
En conclusión, la función blobFromImage() en OpenCV es una herramienta valiosa para preparar imágenes para modelos de aprendizaje profundo. Permite la extracción de características de la imagen y su conversión a un formato compatible con redes neuronales. Al comprender el funcionamiento y la sintaxis de blobFromImage(), podemos mejorar nuestros flujos de trabajo de aprendizaje profundo y lograr mejores resultados.