Python OpenCV: cambio medio

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. 

cambio de media

La idea detrás del cambio medio es que en el algoritmo de cambio medio cada instancia del video se verifica en forma de distribución de píxeles en ese marco. Definimos una ventana inicial, generalmente un cuadrado o un círculo para el que nosotros mismos especificamos las posiciones que identifica el área de máxima distribución de píxeles e intenta realizar un seguimiento de esa área en el video para que cuando el video se esté ejecutando nuestra ventana de seguimiento también se mueve hacia la región de máxima distribución de píxeles. La dirección del movimiento depende de la diferencia entre el centro de nuestra ventana de seguimiento y el centroide de todos los k-píxeles dentro de esa ventana.
Meanshift es un método muy útil para realizar un seguimiento de un objeto en particular dentro de un video. Meanshift puede separar el fondo estático de un video y el objeto de primer plano en movimiento.

Ejemplos: 

1. Las ventanas de seguimiento están siguiendo el fútbol.  

2. La ventana de seguimiento está siguiendo la bola de malabares. 

3. La ventana de seguimiento sigue al jugador de fútbol. 

Python3

# Python program to demonstrate
# meanshift
 
 
import numpy as np
import cv2
  
 
# read video
cap = cv2.VideoCapture('sample.mp4')
  
# retrieve the very first
# frame from the video
_, frame = cap.read()
  
# set the region for the
# tracking window p, q, r, s
# put values according to yourself
p, q, r, s = 150, 150, 460, 100
track_window = (r, p, s, q)
  
     
# create the region of interest
r_o_i = frame[p:p + q, r:r + s]
 
# converting BGR to HSV format
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  
# apply mask on the HSV frame
mask = cv2.inRange(hsv,
                   np.array((0., 61., 33.)),
                   np.array((180., 255., 255.)))
 
# get histogram for hsv channel
roi = cv2.calcHist([hsv], [0], mask,
                   [180], [0, 180])
 
# normalize the retrieved values
cv2.normalize(roi, roi, 0, 255,
              cv2.NORM_MINMAX)
  
# termination criteria, either 15
# iteration or by at least 2 pt
termination = (cv2.TERM_CRITERIA_EPS |
               cv2.TERM_CRITERIA_COUNT
               , 15, 2 )
  
while(True):
    _, frame = cap.read()
  
    frame = cv2.resize(frame,
                       (1280, 720),
                       fx = 0,
                       fy = 0,
                       interpolation = cv2.INTER_CUBIC)
  
    # convert BGR to HSV format
    hsv = cv2.cvtColor(frame,
                       cv2.COLOR_BGR2HSV)
     
    bp = cv2.calcBackProject([hsv],
                             [0],
                             roi,
                             [0, 180],
                             1)
  
    # applying meanshift to get the new region
    _, track_window = cv2.meanShift(bp,
                                    track_window,
                                    termination)
  
    # Draw track window on the frame
    x, y, w, h = track_window
    vid = cv2.rectangle(frame, (x, y),
                        (x + w, y + h),
                        255, 2)
     
    # show results
    cv2.imshow('tracker', vid)
  
    k = cv2.waitKey(1) & 0xff
    if k == ord('q'):
        break
         
# release cap object
cap.release()
 
# destroy all opened windows
cv2.destroyAllWindows()

Salida: algunos cuadros del video de salida



Desventajas de usar el desplazamiento medio

Hay 2 desventajas principales de usar Meanshift para el seguimiento de objetos.  

  • El tamaño de la ventana de seguimiento sigue siendo el mismo independientemente de la distancia del objeto a la cámara.
  • La ventana rastreará el objeto solo cuando esté en la región de ese objeto. Así que debemos codificar nuestra posición de la ventana con cuidado. 

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 *