-
Notifications
You must be signed in to change notification settings - Fork 0
/
41-object_tracking_using_camshift&meanshift.py
105 lines (77 loc) · 3.16 KB
/
41-object_tracking_using_camshift&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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# import numpy as np
# import cv2 as cv
# cap = cv.VideoCapture(r"C:\Users\anshika\Desktop\Robotics Project\test2.mp4")
# # take first frame of the video
# ret, frame = cap.read()
# # setup initial location of window
# x, y, width, height = 580, 30, 80,150
# track = (x, y ,width, height)
# # set up the ROI for tracking
# 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 move by atleast 1 pt
# termntn = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)
# cv.imshow('roi',roi)
# while True:
# 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 the new location
# ret, track = cv.meanShift(dst, track, termntn)
# # Draw it on image
# x,y,w,h = track
# final = cv.rectangle(frame, (x,y), (x+w, y+h), (0,0,255), 3)
# cv.imshow('dst', dst)
# frame = cv.resize(final,(600,600))
# cv.imshow('final_image',frame)
# k = cv.waitKey(30) & 0xff
# if k == 27:
# break
# else:
# break
# cv.destroyAllWindows()
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(r"C:\Users\anshika\Desktop\Robotics Project\test2.mp4")
# take first frame of the video
ret, frame = cap.read()
# setup initial location of window
x, y, width, height = 580, 30, 80,150
track = (x, y ,width, height)
# set up the ROI for tracking
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 move by atleast 1 pt
termntn = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1)
cv.imshow('roi',roi)
while True:
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 the new location
ret, track = cv.CamShift(dst, track, termntn)
# Draw it on image
#x,y,w,h = track
#final = cv.rectangle(frame, (x,y), (x+w, y+h), (0,0,255), 3)
#Try to draw rotating rectangle
pts =cv.boxPoints(ret)
pts = np.int64(pts)
final = cv.polylines(frame,[pts],True,(255,0,0),2)
cv.imshow('dst', dst)
frame = cv.resize(final,(600,600))
cv.imshow('final_image',frame)
k = cv.waitKey(30) & 0xff
if k == 27:
break
else:
break
cv.destroyAllWindows()