para - ¿Cómo usar los componentes conectados de openCV con estadísticas en python?
opencv download (3)
Estoy buscando un ejemplo de cómo usar la función ConnectedComponentsWithStats () de OpenCV en python, tenga en cuenta que esto solo está disponible con OpenCV 3 o posterior. La documentación oficial solo muestra la API para C ++, aunque la función existe cuando se compila para python. No pude encontrarlo en ningún lado en línea.
Agregando a la respuesta de
Zack Knopp
, si está usando una imagen en escala de grises, simplemente puede usar:
import cv2
import numpy as np
src = cv2.imread("path//to//image.png", 0)
binary_map = (src > 0).astype(np.uint8)
connectivity = 4 # or whatever you prefer
output = cv2.connectedComponentsWithStats(binary_map, connectivity, cv2.CV_32S)
Cuando intenté usar la respuesta de
Zack Knopp
en una imagen en escala de grises, no funcionó y esta fue mi solución.
He venido aquí varias veces para recordar cómo funciona y cada vez tengo que reducir el código anterior a:
_, thresh = cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
connectivity = 4 # You need to choose 4 or 8 for connectivity type
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh , connectivity , cv2.CV_32S)
Con suerte, es útil para todos :)
La función funciona de la siguiente manera:
# Import the cv2 library
import cv2
# Read the image you want connected components of
src = cv2.imread(''/directorypath/image.bmp'')
# Threshold it so it becomes binary
ret, thresh = cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# You need to choose 4 or 8 for connectivity type
connectivity = 4
# Perform the operation
output = cv2.connectedComponentsWithStats(thresh, connectivity, cv2.CV_32S)
# Get the results
# The first cell is the number of labels
num_labels = output[0]
# The second cell is the label matrix
labels = output[1]
# The third cell is the stat matrix
stats = output[2]
# The fourth cell is the centroid matrix
centroids = output[3]
Etiquetas es una matriz del tamaño de la imagen de entrada donde cada elemento tiene un valor igual a su etiqueta.
Estadísticas es una matriz de las estadísticas que calcula la función. Tiene una longitud igual al número de etiquetas y un ancho igual al número de estadísticas. Se puede usar con la documentación de OpenCV para ello:
Salida de estadísticas para cada etiqueta, incluida la etiqueta de fondo, consulte a continuación las estadísticas disponibles. Se accede a las estadísticas a través de estadísticas [etiqueta, COLUMNA] donde las columnas disponibles se definen a continuación.
- cv2.CC_STAT_LEFT La coordenada más a la izquierda (x) que es el inicio inclusivo del cuadro delimitador en la dirección horizontal.
- cv2.CC_STAT_TOP La coordenada superior (y) que es el inicio inclusivo del cuadro delimitador en la dirección vertical.
- cv2.CC_STAT_WIDTH El tamaño horizontal del cuadro delimitador
- cv2.CC_STAT_HEIGHT El tamaño vertical del cuadro delimitador
- cv2.CC_STAT_AREA El área total (en píxeles) del componente conectado
Los centroides son una matriz con las ubicaciones x e y de cada centroide. La fila en esta matriz corresponde al número de etiqueta.