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