# 黄色赛道检测与距离估算 这个模块提供了一套用于检测黄色赛道并估算距离的工具。基于OpenCV的计算机视觉技术,能够从图像中识别黄色赛道,计算方向角度,并估算摄像机到赛道前方的距离。 ## 功能特点 - 黄色赛道检测与分割 - 赛道方向和角度计算 - 赛道距离估算 - 结果可视化展示 - 提供易于使用的测试工具 ## 安装依赖 确保已安装以下依赖库: ```bash pip install opencv-python numpy ``` ## 使用方法 ### 基本用法 ```python from utils.detect_track import detect_yellow_track, visualize_track_detection # 检测赛道并估算距离 image_path = "path/to/your/image.jpg" distance, path_info = detect_yellow_track(image_path) if distance is not None: print(f"估算距离: {distance:.2f}米") print(f"赛道角度: {path_info['track_angle']:.2f}°") print(f"转向方向: {path_info['turn_direction']}") # 可视化检测过程 visualize_track_detection(image_path, save_path="result.jpg") ``` ### 使用测试脚本 项目提供了一个方便的测试脚本: ```bash python test_track_detection.py --image path/to/your/image.jpg --observe --save result.jpg ``` 参数说明: - `--image`: 要处理的图像路径(必需) - `--save`: 结果图像保存路径(可选) - `--observe`: 显示处理步骤的中间结果 - `--delay`: 中间步骤显示的延迟时间,单位为毫秒(默认500ms) ## 技术细节 ### 检测原理 1. 将图像转换为HSV颜色空间 2. 使用颜色阈值提取黄色区域 3. 寻找轮廓并合并相关区域 4. 计算赛道的上部和下部中心点 5. 基于中心点计算方向角度 6. 根据黄色区域在图像中的占比估算距离 ### 距离估算 距离估算基于以下假设: - 黄色赛道在图像中的占比与实际距离有反比关系 - 占比越大,距离越近;占比越小,距离越远 注意:实际应用中,建议根据相机参数和实际测量进行标定,以获得更准确的结果。 ### 函数说明 - `preprocess_image(image)`: 预处理图像,进行边缘检测 - `detect_yellow_track(image, observe=False, delay=500)`: 检测黄色赛道并估算距离 - `visualize_track_detection(image, save_path=None, observe=False, delay=500)`: 可视化检测过程 - `estimate_distance_to_track(image)`: 估算到赛道的距离(简化版API) ## 调整参数 如果检测效果不理想,可以尝试调整以下参数: 1. HSV颜色范围(针对不同光照条件): ```python lower_yellow = np.array([20, 100, 100]) # 调整黄色的下限 upper_yellow = np.array([30, 255, 255]) # 调整黄色的上限 ``` 2. 轮廓近似参数: ```python epsilon = 0.01 * cv2.arcLength(all_contours, False) # 调整系数(0.01) ``` 3. 距离估算系数: ```python normalized_distance = min(10.0, max(0.0, estimated_distance / 100.0)) # 调整系数(100.0) ``` ## 示例结果 处理后的图像将包含以下信息: - 红色点:表示赛道的顶部和底部中心点 - 绿色线:表示赛道的中心线 - 文本信息:距离、角度和方向 ## 注意事项 - 该方法在光照条件稳定的环境中效果最佳 - 黄色赛道需要与背景有足够的对比度 - 摄像机应保持相对稳定的高度和角度 - 实际应用中需要根据具体场景调整参数