3.3 轮廓分析与特征提取

轮廓检测实现

contours, _ = cv2.findContours(
    mask, 
    cv2.RETR_EXTERNAL,  # 只检测最外层轮廓
    cv2.CHAIN_APPROX_SIMPLE  # 压缩水平、垂直和对角线段
)

关键特征提取

for cnt in contours:
    # 计算轮廓面积
    area = cv2.contourArea(cnt)
    
    # 计算轮廓周长
    perimeter = cv2.arcLength(cnt, True)
    
    # 计算圆形度(1表示完美圆形)
    circularity = 4 * np.pi * area / (perimeter * perimeter)
    
    # 获取边界矩形
    x, y, w, h = cv2.boundingRect(cnt)
    
    # 计算长宽比
    aspect_ratio = w / float(h)

网球识别条件

if (area > min_area and area < max_area and 
    circularity > 0.8 and 
    0.8 < aspect_ratio < 1.2):
    # 识别为网球