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:
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