| import cv2 | |
| import numpy as np | |
| def detect_ball(frame): | |
| hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) | |
| lower_red1 = np.array([0, 100, 100]) | |
| upper_red1 = np.array([10, 255, 255]) | |
| lower_red2 = np.array([160, 100, 100]) | |
| upper_red2 = np.array([180, 255, 255]) | |
| mask1 = cv2.inRange(hsv, lower_red1, upper_red1) | |
| mask2 = cv2.inRange(hsv, lower_red2, upper_red2) | |
| mask = mask1 | mask2 | |
| contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) | |
| if contours: | |
| largest = max(contours, key=cv2.contourArea) | |
| (x, y), radius = cv2.minEnclosingCircle(largest) | |
| return (int(x), int(y)) | |
| return None | |