Rastree objetos con Camshift usando OpenCV

OpenCV es la enorme biblioteca de código abierto para visión por computadora, aprendizaje automático y procesamiento de imágenes y ahora juega un papel importante en la operación en tiempo real, lo cual es muy importante en los sistemas actuales. Al usarlo, uno puede procesar imágenes y videos para identificar objetos, rostros o incluso la escritura a mano de un ser humano.

Camshift o podemos decir Meanshift Adaptativo Continuo es una versión mejorada del algoritmo de cambio medio que proporciona más precisión y solidez al modelo. Con la ayuda del algoritmo Camshift, el tamaño de la ventana sigue actualizándose cuando la ventana de seguimiento intenta converger. El seguimiento se realiza utilizando la información de color del objeto. Además, proporciona la ventana de seguimiento más adecuada para el seguimiento de objetos. Primero aplica el desplazamiento medio y luego actualiza el tamaño de la ventana como:

 \[s = 2\times\sqrt{\frac{M_{00}}{256}}\]

A continuación, calcula la elipse que mejor se ajusta a ella y vuelve a aplicar el desplazamiento medio con la ventana de búsqueda recién escalada y la ventana anterior. Este proceso continúa hasta que se alcanza la precisión requerida.

Nota: Para obtener más información sobre el cambio medio, consulte Python OpenCV: cambio medio

A continuación se muestra la implementación.

import numpy as np
import cv2 as cv
  
  
# Read the input video
cap = cv.VideoCapture('sample.mp4')
  
# take first frame of the
# video
ret, frame = cap.read()
  
# setup initial region of
# tracker
x, y, width, height = 400, 440, 150, 150
track_window = (x, y, 
                width, height)
  
# set up the Region of
# Interest for tracking
roi = frame[y:y + height,
            x : x + width]
  
# convert ROI from BGR to
# HSV format
hsv_roi = cv.cvtColor(roi,
                      cv.COLOR_BGR2HSV)
  
# perform masking operation
mask = cv.inRange(hsv_roi, 
                  np.array((0., 60., 32.)),
                  np.array((180., 255., 255)))
  
roi_hist = cv.calcHist([hsv_roi], 
                       [0], mask,
                       [180], 
                       [0, 180])
  
cv.normalize(roi_hist, roi_hist,
             0, 255, cv.NORM_MINMAX)
  
  
# Setup the termination criteria, 
# either 15 iteration or move by
# atleast 2 pt
term_crit = ( cv.TERM_CRITERIA_EPS | 
             cv.TERM_CRITERIA_COUNT, 15, 2)
  
  
while(1):
      
    ret, frame = cap.read()
      
    # Resize the video frames.
    frame = cv.resize(frame, 
                      (720, 720), 
                      fx = 0, fy = 0,
                      interpolation = cv.INTER_CUBIC)
      
    cv.imshow('Original', frame)
  
    # perform thresholding on 
    # the video frames
    ret1, frame1 = cv.threshold(frame,
                                180, 155,
                                cv.THRESH_TOZERO_INV)
  
    # convert from BGR to HSV
    # format.
    hsv = cv.cvtColor(frame1, 
                      cv.COLOR_BGR2HSV)
  
    dst = cv.calcBackProject([hsv], 
                             [0], 
                             roi_hist, 
                             [0, 180], 1)
      
    # apply Camshift to get the 
    # new location
    ret2, track_window = cv.CamShift(dst,
                                     track_window,
                                     term_crit)
  
    # Draw it on image
    pts = cv.boxPoints(ret2)
      
    # convert from floating
    # to integer
    pts = np.int0(pts)
  
    # Draw Tracking window on the
    # video frame.
    Result = cv.polylines(frame, 
                          [pts], 
                          True, 
                          (0, 255, 255), 
                          2)
  
    cv.imshow('Camshift', Result)
  
    # set ESC key as the
    # exit button.
    k = cv.waitKey(30) & 0xff
      
    if k == 27:
        break
          
  
# Release the cap object
cap.release()
  
# close all opened windows
cv.destroyAllWindows()

Producción:

Publicación traducida automáticamente

Artículo escrito por KaranGupta5 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 *