2.4 目标识别核心算法
轮廓检测
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- 原理:在二值图像中查找连通区域边界
- RETR_EXTERNAL:只检测最外层轮廓
- CHAIN_APPROX_SIMPLE:压缩轮廓点,减少内存
轮廓分析
for cnt in contours:
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt, True)
circularity = 4 * np.pi * area / (perimeter * perimeter)
- 面积过滤:去除过小或过大的区域
- 圆形度计算:判断轮廓接近圆形的程度
- 边界框:获取目标位置和大小
位置计算
# 计算网球中心坐标
center_x = x + w // 2
center_y = y + h // 2
# 计算网球在图像中的比例
ratio = (h / image_height) * (w / image_width)