# 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()