1
+ from imutils .video import VideoStream
2
+ import numpy as np
3
+ import imutils
4
+ import time
5
+ import cv2
6
+
7
+
8
+ class TrackROI ():
9
+
10
+ def __init__ (self ):
11
+ self .refPt = []
12
+ self .clickEventsEnabled = False
13
+ self .drawingRectangle = False
14
+ self .rectangleDrawn = False
15
+ self .x_start = - 1
16
+ self .y_start = - 1
17
+ self .ref_frame = None
18
+
19
+
20
+ def clickAndCrop (self , event , x , y , flags , param ):
21
+
22
+ temp_frame = np .copy (self .ref_frame )
23
+
24
+ if (self .clickEventsEnabled == True ):
25
+ if event == cv2 .EVENT_LBUTTONDOWN :
26
+ if ((self .rectangleDrawn == False )):
27
+ self .drawingRectangle = True
28
+ self .x_start ,self .y_start = x ,y
29
+ self .refPt .append ((x ,y ))
30
+
31
+ elif event == cv2 .EVENT_MOUSEMOVE :
32
+ if (self .drawingRectangle == True ):
33
+ cv2 .rectangle (temp_frame , (self .x_start ,self .y_start ), (x ,y ), (0 ,0 ,255 ), 2 )
34
+ cv2 .imshow ("OBJECT TRACKING" , temp_frame )
35
+ temp_frame = self .ref_frame
36
+
37
+ elif event == cv2 .EVENT_LBUTTONUP :
38
+ if ((self .rectangleDrawn == False )):
39
+ self .drawingRectangle = False
40
+ self .rectangleDrawn = True
41
+ cv2 .rectangle (self .ref_frame , (self .x_start , self .y_start ), (x ,y ), (0 ,0 ,255 ), 2 )
42
+ self .refPt .append ((self .x_start , self .y_start ))
43
+ self .refPt .append ((x , self .y_start ))
44
+ self .refPt .append ((x , y ))
45
+ self .refPt .append ((self .x_start , y ))
46
+
47
+ #roiPoints = [(self.x_start, self.y_start), (x, y)]
48
+
49
+ # if len(roiPoints) == 2:
50
+ # roi = self.ref_frame[roiPoints[0][1]:roiPoints[1][1], roiPoints[0][0]:roiPoints[1][0]]
51
+ # cv2.imshow("Cropped Object", roi)
52
+
53
+ roi = (self .x_start , self .y_start , x , y )
54
+
55
+ return np .array ([[self .x_start , self .y_start ], [x , self .y_start ], [x , y ], [self .x_start , y ]])
56
+
57
+
58
+ def maskImg_WithROI (self , frame , ROIPointsList ):
59
+ pointsArray = np .array (ROIPointsList )
60
+ mask = np .zeros_like (frame .shape , dtype = np .uint8 )
61
+
62
+ cv2 .fillPoly (mask , np .int32 ([pointsArray ]), 255 )
63
+ maskedImage = cv2 .bitwise_and (frame , mask )
64
+ cv2 .imshow ("Masked Frame" , maskedImage )
65
+ return maskedImage
66
+
67
+ def outputROIMask (self , frame , ROIPointsList ):
68
+ pointsArray = np .array (ROIPointsList )
69
+ pointsArray = pointsArray .reshape ((- 1 ,1 ,2 ))
70
+ mask = np .zeros (frame .shape , dtype = np .uint8 )
71
+ white = (255 ,255 ,255 )
72
+ cv2 .fillPoly (mask , np .int32 ([pointsArray ]), white )
73
+ return mask
74
+
75
+ def main (self ):
76
+
77
+ self .clickEventsEnabled = True
78
+
79
+ #logo = cv2.imread('Baykar-Logo.png')
80
+ #logo = cv2.resize(logo, (100,100), interpolation=cv2.INTER_AREA)
81
+
82
+ video = 'videos/drone01.mp4'
83
+ cap = cv2 .VideoCapture (video )
84
+
85
+ if cap .isOpened ():
86
+ ret , self .ref_frame = cap .read ()
87
+ originalRef_Frame = np .copy (self .ref_frame )
88
+ else :
89
+ ret = False
90
+
91
+
92
+ cv2 .namedWindow ("OBJECT TRACKING" )
93
+ cv2 .setMouseCallback ("OBJECT TRACKING" , self .clickAndCrop )
94
+
95
+ while ret :
96
+
97
+
98
+ self .ref_frame = cap .read ()
99
+ self .ref_frame = self .ref_frame [1 ]
100
+
101
+ self .ref_frame = imutils .resize (self .ref_frame , width = 800 )
102
+
103
+ #self.ref_frame[0:100, 700:800] = logo
104
+
105
+
106
+ cv2 .imshow ("OBJECT TRACKING" , self .ref_frame )
107
+
108
+ key = cv2 .waitKey (0 ) & 0xFF
109
+
110
+ if key == ord ("r" ):
111
+ self .ref_frame = np .copy (originalRef_Frame )
112
+ self .refPt = []
113
+ self .drawingRectangle = False
114
+ self .rectangleDrawn = False
115
+ self .x_start , self .y_start = - 1 ,- 1
116
+
117
+ elif key == ord ("p" ):
118
+ #self.clickEventsEnabled = False
119
+ self .ref_frame = np .copy (originalRef_Frame )
120
+ self .drawingRectangle = False
121
+ self .rectangleDrawn = False
122
+ #break
123
+
124
+ elif key == ord ("q" ):
125
+ break
126
+
127
+ self .gray = cv2 .cvtColor (self .ref_frame , cv2 .COLOR_BGR2GRAY )
128
+
129
+ #self.ref_frame = self.maskImg_WithROI(self, self.gray, self.refPt)
130
+ #cv2.imshow("Masked Frame", self.maskImg_WithROI(self, self.gray, self.refPt))
131
+
132
+
133
+ #roiMask = self.outputROIMask(self.ref_frame, self.refPt)
134
+ #cv2.imwrite("ROI.jpg", roiMask)
135
+
136
+ cv2 .waitKey (0 )
137
+ cv2 .destroyAllWindows ()
138
+
139
+ if __name__ == '__main__' :
140
+ trackROI = TrackROI ()
141
+ trackROI .main ()
0 commit comments