-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeanshift.py
42 lines (34 loc) · 1.22 KB
/
meanshift.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import cv2 as cv
import numpy as np
cap=cv.VideoCapture('slow_traffic_small.mp4')
# take the first frame of video
ret,frame=cap.read()
#set up initial location of window
x,y,width,height= 300,200,100,50
track_window=(x,y,width,height)
#define region of interest
roi=frame[y:y+height,x:x+width]
hsv_roi=cv.cvtColor(roi,cv.COLOR_BGR2HSV)
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 10 iteration or more by atleast 1 point
term_crit=(cv.TERM_CRITERIA_EPS| cv.TERM_CRITERIA_COUNT,10,1)
cv.imshow('roi',roi)
while(1):
ret,frame=cap.read()
if ret==True:
hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
dst=cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)
# apply meanshift to get to the new location
ret,track_window=cv.meanShift(dst,track_window,term_crit)
# draw on image
x,y,w,h=track_window
final_image=cv.rectangle(frame,(x,y),(x+w,y+h),255,3)
cv.imshow("final_image",final_image)
cv.imshow('dst',dst)
k=cv.waitKey(30) &0xff
if k=='27':
break
else:
break