Cuente el número de objetos usando Python-OpenCV

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *