-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathanswer.py
More file actions
40 lines (31 loc) · 1.03 KB
/
answer.py
File metadata and controls
40 lines (31 loc) · 1.03 KB
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
import cv2
import numpy as np
COLOR_RANGES_BGR = {
'red': ([0, 0, 200], [50, 50, 255]),
'green': ([0, 200, 0], [50, 255, 50]),
'blue': ([200, 0, 0], [255, 50, 50]),
}
MIN_PIXELS_FOR_BIG_BALL = 35
CENTER_LINE_X = 320
COOLDOWN_FRAMES = 15
crossed_colors = []
last_seen = {color: -999 for color in COLOR_RANGES_BGR}
cap = cv2.VideoCapture('video1.mp4')
frame_index = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
line_pixels = frame[:, CENTER_LINE_X, :]
line_strip = line_pixels.reshape(-1, 1, 3)
for color, (lower, upper) in COLOR_RANGES_BGR.items():
lower = np.array(lower, dtype=np.uint8)
upper = np.array(upper, dtype=np.uint8)
mask = cv2.inRange(line_strip, lower, upper)
pixel_count = cv2.countNonZero(mask)
if pixel_count > MIN_PIXELS_FOR_BIG_BALL and frame_index - last_seen[color] > COOLDOWN_FRAMES:
crossed_colors.append(color)
last_seen[color] = frame_index
frame_index += 1
cap.release()
print(crossed_colors)