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