En este artículo, usaremos el procesamiento de imágenes para contar la cantidad de objetos que usan OpenCV en Python.
Módulo necesario
- OpenCv : OpenCv es una biblioteca de código abierto que es útil para aplicaciones de visión por computadora, como procesamiento de imágenes, procesamiento de video, reconocimiento y detección facial, etc.
- Numpy : Numpy es un paquete de python para computación científica. Es una biblioteca matemática popular para el aprendizaje automático. El objeto principal de Numpy es una array multidimensional.
- Matplotlib : Matplotlib es una biblioteca de Python utilizada para la visualización de datos y el trazado gráfico de los datos.
Imagen utilizada:.
Implementación paso a paso
Paso 1: importa las bibliotecas requeridas.
Python3
# Import libraries import cv2 import numpy as np import matplotlib.pyplot as plt
Paso 2: Leeremos la imagen usando el comando “cv2.imread(nombre-imagen)” y luego convertiremos esta imagen en una imagen en escala de grises usando el comando “cv2.cvtColor(nombre-imagen, cv2.COLOR_BGR2GRAY)” .
Python3
image = cv2.imread('coins.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) plt.imshow(gray, cmap='gray')
Producción:
Paso 3: Para contar, debemos detectar los bordes, pero antes de detectar los bordes, debemos hacer que la imagen se desenfoque para evitar los ruidos. Use «cv2.GaussianBlur (nombre de la imagen, tamaño Kernal, desviación estándar)» .
Python3
blur = cv2.GaussianBlur(gray, (11, 11), 0) plt.imshow(blur, cmap='gray')
Producción:
Paso 4: ahora detectaremos bordes usando un algoritmo astuto, los parámetros 2 y 3 en la función cv2.canny() son valores de umbral. un valor entre 30 y 150 se considera un borde para esta imagen.
Python3
canny = cv2.Canny(blur, 30, 150, 3) plt.imshow(canny, cmap='gray')
Producción:
Paso 5: Podemos ver que los bordes no están conectados. Necesitamos conectar los bordes, tenemos que hacerlos más gruesos y visibles.
Python3
dilated = cv2.dilate(canny, (1, 1), iterations=0) plt.imshow(dilated, cmap='gray')
Producción:
Paso 6: Ahora tenemos que calcular el contorno de la imagen y convertir la imagen a RGB desde BGR y luego dibujar los contornos.
Python3
(cnt, hierarchy) = cv2.findContours( dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2) plt.imshow(rgb)
Producción:
Paso 7: Imprimiendo el resultado
Python3
print("coins in the image : ", len(cnt))
Producción:
coins in the image: 5
A continuación se muestra la implementación completa:
Python3
# Import libraries import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread('coins.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (11, 11), 0) canny = cv2.Canny(blur, 30, 150, 3) dilated = cv2.dilate(canny, (1, 1), iterations=0) (cnt, hierarchy) = cv2.findContours( dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2) print("coins in the image : ", len(cnt))
Producción:
coins in the image : 5
Publicación traducida automáticamente
Artículo escrito por asmitapatidar2023 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA